如何从指令内部观察变量的变化

How to watch change of variable from inside a directive?

本文关键字:变量 变化 观察 内部 指令      更新时间:2023-09-26

我有一个自定义指令,编码如下:

 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监视触发在您的例子?应该的,因为它只是一个包含数组的属性。