如何从指令内部观察变量的变化
How to watch change of variable from inside a directive?
我有一个自定义指令,编码如下:
angular.module('client.core.directives')
.directive('containerlayout', function () {
function link(scope, el, attr) {
scope.$watch(['xdim', 'ydim', 'numOrder'], function () {
console.log("Watch Xdim/Ydim/numOrd change");
// do something when these changesd
}, true);
scope.$watch('labels', function (labels) {
// do something when labels array changes
}, true);
}
return {
link: link,
restrict: 'E',
scope: { geometry: '=geometry', xdim: '=xdim',
ydim: '=ydim', numOrder: '=numorder', labels: '=labels',
states: '=states', emptyToSkipped: '=emptytoskipped' }
};
和I有以下声明:
<containerlayout geometry="rect" xdim="cont.xdim"
ydim="cont.ydim" numorder="1" labels="cont.labels"
states="cont.states" emptytoskipped="emptytoskipped"
class="ng-isolate-scope"></containerlayout>
,但当我改变,说$scope.cont。Xdim或其他一些变量,什么都没有发生,手表也没有触发。
注意xdim和ydim是整数,而labels是数组。
我应该如何在指令中声明东西,以便它可以监视变量?它们是否需要在控制器中初始化才能成功工作?如果可能的话,我需要保持在隔离范围内。
$watch('propertyName', func)
只监视一个$scope.propertyName
。
如果你想监视几个属性,你需要$watchCollection('[propertyName, anotherPropertyName]', func)
。
scope.$watchCollection('[xdim, ydim, numOrder]', function (valuesArray) {
console.log("Watch Xdim/Ydim/numOrd change", valuesArray);
}, true);
labels
监视触发在您的例子?应该的,因为它只是一个包含数组的属性。
相关文章:
- 重新加载页面时Javascript变量发生变化
- 如何检测和打印变化变量LESS
- 当变量发生变化时运行PHP
- 使用 jquery 检测变量变化
- 如果两个值都会动态变化,则用变量替换某个字符串的一部分 - Javascript
- 为什么 Angular 没有注意到这个变量的值发生了变化
- 如何防止变量在 JavaScript 中发生变化
- 为什么这个变量在函数之间传递时会发生变化
- 指令侦听控制器变量的变化
- JAVASCRIPT 变量在函数中没有变化
- 双向绑定不识别 AngularJS 中的变量变化
- 角度范围之外的变量的变化
- 设置路由时,角度范围变量会发生变化
- PHP 变量根据设备宽度而变化
- 观察Jquery/Javascript中的变量变化
- Javascript -在变量变化时播放声音
- jQuery中奇怪的变量变化
- Angular JS $作用域、数据绑定和变量变化
- Angular不会识别forEach循环中的作用域变量变化
- 如何使动态视图在作用域变量变化时正确更新