我知道$apply
用于连接 Javascript 上下文和 AngularJS 上下文。
一个简单的例子如下:
模板:
<div>{{someVal}}</div>
控制器中的javascript:
setTimeout(function() {
scope.$apply(function(){scope.someVal = 123});
}, 1000);
我们需要$apply
在上述情况下使用。
第一个问题:
如果我将上面的 javascript 修改为:
setTimeout(function() {
scope.someVal = 123;
}, 1000);
scope.$watch('someVal', function(val) {
console.info(someVal);
});
没有控制台关于 someVal 修改为 123 ......为什么?我们不能看超时回调中修改的表达式吗?
第二个问题:
如果我们使用 ngSwitch 指令,如下所示:
<div ng-switch on="sub">
<div ng-switch-when="a">
//state a
</div>
<div ng-switch-when="b">
//state b
</div>
</div>
当我修改sub
in 控制器时:
scope.sub = 'a';
setTimeout(function() {
scope.sub = 'b';
}, 1000);
没必要用$apply
!!!!为什么?
我发现 ngSwitch 指令用于$watch
监视on
属性值。为什么ngSwitch可以看到超时回调中修改的范围属性??????
请告诉我上述 2 个问题的原因。