我有一個自定義指令,它向鏈接函數中的作用域添加屬性,然後添加一個手錶給它。如果我從控制器中更改了範圍屬性的值,手錶就會被觸發。如果我從指令內改變相同的值,它不會被解僱。
下面是一個例子:http://jsbin.com/bocixiha/3/edit
見指令裏面的setTimeout,這種變化沒有任何影響。
p.s:這只是模擬我有什麼我沒有使用setTimeout,但它的工作原理是一樣的。
var app = angular.module('app', []);
app.controller('myCtrl', function($scope) {
$scope.changeProp = function() {
$scope.options.someProperty = "Hello Stackoverflow";
};
});
app.directive('mydir', function() {
return {
priority: 5001,
restrict: 'A',
compile: function(element, attrs) {
return function(scope, element, attrs) {
scope.options = {
someProperty: "Hello World"
};
setTimeout(function() {
console.log("Timeout Fired!");
scope.options.someProperty = "This never gets set";
}, 5000);
scope.$watch('options.someProperty', function(n,o) {
//This will fire when value changed from controller only.
console.log("New: " + n + " Old: " + o);
});
};
}
};
});
感謝您的快速回復,必填範圍。$ apply()在更改後。 –