我注意到只有在值发生变化时,scope.watch才会触发。现在,为了每次我这样做时触发scope.watch:
var module = angular.module('myapp', []);
module.controller("TreeCtrl", function($scope) {
$scope.changeValue = function(){
$scope.name = new Date();
};
});
module.directive("tree", function($compile) {
return {
restrict: "E",
template:'<div>sample</div>',
link : function(scope, elm, $attrs) {
scope.$watch('name', function(newVal, oldVal) {
console.log(scope.userName);
});
}
};
});
即$ scope.name = new Date();
每当设置变量时,是否有其他方法可以捕获scope.watch。
我的小费是http://jsfiddle.net/xxkgxLr9/34/
scope.watch是正确的方法吗?
我的目标是每次设置范围变量时从控制器发出一段代码
答案 0 :(得分:2)
var module = angular.module('myapp', []);
module.controller("TreeCtrl", function($scope) {
$scope.changeValue = function(){
$scope.name = new Date();
console.log($scope.name);
};
});
module.directive("tree", function($compile) {
return {
restrict: "E",
template:'<div>sample</div>',
link : function($scope, elm, $attrs) {
$scope.$watch('userName', function(newVal, oldVal) {
console.log($scope.userName);
console.log($scope.name);
});
}
};
});
答案 1 :(得分:2)
按钮和指令元素的范围是不同的。您的代码需要一些修改。 $ compile不应该作为指令函数的参数给出。
控制器中的数据使用范围传递给指令:{'name':'@'}
options && options.name || 'Buddy'
每当更改变量名称时,watch都会被触发。
答案 2 :(得分:1)
如果只能通过setter功能设置变量,你可以试试这个:
var module = angular.module('myapp', []);
module.controller("TreeCtrl", function($scope) {
$scope.changeValue = function(){
$scope.updateName(new Date());
};
});
module.directive("tree", function($compile) {
return {
restrict: "E",
template:'<div>sample</div>',
link : function(scope, elm, $attrs) {
scope.updateName = function (newVal) {
console.log(newVal);
};
}
};
});