Javascript 如何从指令内部观察变量的变化?
我有一个自定义指令,其编码如下:Javascript 如何从指令内部观察变量的变化?,javascript,angularjs,Javascript,Angularjs,我有一个自定义指令,其编码如下: angular.module('client.core.directives') .directive('containerlayout', function () { function link(scope, el, attr) { scope.$watch(['xdim', 'ydim', 'numOrder'], function () { console.lo
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' }
};
我有以下声明:
<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是整数,标签是数组
我应该如何在指令中声明内容,以便它监视变量?它们是否需要在控制器中初始化才能成功工作?如果可能的话,我需要保持在隔离的作用域中。$watch('propertyName',func)
只监视一个$scope.propertyName
如果要监视多个属性,则需要$watchCollection('[propertyName,anotherPropertyName]',func)
在您的示例中,
labels
watcher是否触发?它应该是,因为它只是一个包含数组的属性。另一个问题是隔离作用域,这意味着您与控制器没有通信……好吧,Askar已经通过“=”将所有这些变量传递到指令中。所以他们是可以接近的。
scope.$watchCollection('[xdim, ydim, numOrder]', function (valuesArray) {
console.log("Watch Xdim/Ydim/numOrd change", valuesArray);
}, true);