【发布时间】:2014-09-21 04:03:21
【问题描述】:
我正在尝试编写一个脚本来访问根作用域并从开发工具更改变量值。我可以获得范围和根范围,但我的更改没有显示在我的绑定中。但是,如果我使用绑定输入,一切都很好。
例子:
<input ng-model="mode"></input>
<span ng-bind-html="mode"></span>
彼此更新很好,但是
angular.element("body").scope().$root.mode = 'test'
更新控制器但对绑定没有影响。我使用 === 比较了我的原始控制器和我的控制台控制器,它们是相等的。
所以从我阅读的内容来看,我需要广播或发出我已经更改了范围,但是我似乎无法弄清楚要广播什么,或者我是否正确广播。
广播代码尝试:
scope.$apply(function() {root.$emit('change', {mode: 1})})
scope.$apply(function() {root.$emit('stateChangeSuccess', {mode: 1})})
root.$apply(function() {root.$emit('change', {mode: 1})})
root.$apply(function() {root.$emit('stateChangeSuccess', {mode: 1})})
另外应该注意的是,更改输入会更改跨度,但不会更改我的根范围副本。
root.mode = 'console'
type 'input text' in the input
root.mode returns 'console'
【问题讨论】:
-
从“角度之外”更新值后,您应该只需要运行一个摘要循环。把 angular.element("body").scope().$root.$apply();在你更新之后。这将触发一个摘要循环,并让视图和模型同步。如果您不订阅(通过 scope.$on)它们,则无需 $emit 更改。
标签: angularjs google-chrome-devtools rootscope