【发布时间】:2014-07-01 07:23:05
【问题描述】:
我有自定义指令,将属性添加到链接函数内部的范围,然后添加一个监视。如果我从控制器更改范围属性的值,手表就会触发。如果我从指令内部更改相同的值,它不会被触发。
这里是一个例子: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);
});
};
}
};
});
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope