我知道$apply
用於連接Javascript上下文和AngularJS上下文。
一個簡單的例子如下:
模板:
<div>{{someVal}}</div>
的JavaScript控制器:
setTimeout(function() {
scope.$apply(function(){scope.someVal = 123});
}, 1000);
我們需要在上述情況下使用$apply
。
首先Qustion:
如果我修改上面的javascript來:
setTimeout(function() {
scope.someVal = 123;
}, 1000);
scope.$watch('someVal', function(val) {
console.info(someVal);
});
修改爲123約someVal沒有控制檯...爲什麼?我們不能看超時回調中修改的表達式嗎?
第二個問題:
如果我們使用ngSwitch指令象下面這樣:
<div ng-switch on="sub">
<div ng-switch-when="a">
//state a
</div>
<div ng-switch-when="b">
//state b
</div>
</div>
當我修改sub
在控制器:
scope.sub = 'a';
setTimeout(function() {
scope.sub = 'b';
}, 1000);
無需使用$apply
!!!!爲什麼?
我發現ngSwitch指令使用$watch
來監視on
屬性值。爲什麼ngSwitch可以監視超時回調中修改的範圍屬性?????
請告訴我關於上述2個問題的原因。
第二個問題解決了!其他$申請觸發$申請someVal,如http://jsfiddle.net/stefanqi/Jvak8/。 – Stefan