gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:18:56 25 4
gpt4 key购买 nike

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

 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 或其他一些变量,什么也没有发生, watch 也没有触发。

请注意,xdim 和 ydim 是整数,labels 是数组。

我应该如何在指令中声明事物,以便它监视变量?它们是否需要首先在 Controller 中初始化才能成功工作?如果可能的话,我需要保持在孤立的范围内。

最佳答案

$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 - 如何从指令内部观察变量的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com