【问题标题】:AngularJS : How to edit $scope from the console? [duplicate]AngularJS:如何从控制台编辑 $scope? [复制]
【发布时间】:2015-08-24 13:07:55
【问题描述】:

我可以根据接受的答案here 访问$scope 变量。但是,我无法从控制台编辑它,即更改属性、调用函数等。这甚至可能吗?

这是我一直在尝试的测试代码:

<!doctype html>
<html data-ng-app="Foo">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script type="text/javascript">
      var app = angular.module("Foo", []);
      app.controller("One", ["$scope", function($scope) {
        $scope.text = "hello";
      }]);
    </script>
  </head>
  <body>
    <div id="container" ng-controller="One">
      {{ text }}
    </div><!-- #container -->
  </body>
</html>

如果我使用控制台编辑 text 属性,它会改变,但视图不会改变:

> angular.element($("#container")).scope().text
< "hello"
> angular.element($("#container")).scope().text = 'bye'
< "bye"

如何从控制台更改$scope 值和属性,以便视图和所有依赖项也得到更新?

【问题讨论】:

  • 这不是一个重复的问题(只是标题不好)
  • @DavidGrinberg 链接问题回答了 OP 的要求。其实我也发现了更多。
  • @PSL 这不是您声称它是重复的问题,即使您链接的其他问题也不能很好地回答这个问题。这里的核心问题是如何“应用”更改。
  • @DavidGrinberg 我不认为 83 票是最低的排名.. :/ 它清楚地区分使用香草和使用 jquery 时。

标签: javascript angularjs angularjs-digest


【解决方案1】:

任何从外部角度上下文更新的范围变量都不会更新它的绑定,您需要在使用 scope.$apply() 更新范围值后运行 digest cycle,这将调用 $digest 方法,所有绑定都将在 HTML 上更新.

 angular.element($("#container")).scope().text
 angular.element($("#container")).scope().$apply()

注意:- 您应该添加 jQuery 文件以使其正常工作。

【讨论】:

  • 这实际上是错误的。 OP 甚至没有使用 jquery(基于显示的代码)
  • @downvoter 请发表评论..我的答案有什么问题?
  • .$apply 会起作用,但我不知道如果没有加载 jquery,sn-p 将如何运行。但是足够奇怪的 OP 可能没有显示完整的代码,而且似乎 op 自己正在这样做。所以我想我可以从怀疑中受益!!我的删除了...
  • 感谢@PSL,我添加了与注释相同的内容。