$scope$带有复杂变量的手表

$scope.$watch with a complex variable

本文关键字:手表 变量 scope 复杂      更新时间:2023-09-26

我需要$scope$观察这样一个变量:

$scope.data.localization[$scope.locale].properties[0].value

$scope.data.location[$scope.locale].properties是一个对象数组,其中每个对象都有一个代码和一个值,我使用这些对来创建动态表单:

<input type="text" ng-repeat="property in $scope.data.localization[$scope.locale].properties" ng-model="property.value" />

现在,只有当另一个文本框有值时,一些文本框才必须可见,所以基本上我想要$scope$观察其中一个值,但它不起作用,$watch的回调从未启动:

$scope.$watch("data.localization." + $scope.locale +".properties[0].value", function () {
   //show/hide another texbox if I have a value
});

知道如何实现吗?

编辑:我试过

$scope.$watch("data.localization", function () {
   //show/hide another texbox if I have a value
});

并且它触发了回调,所以看起来问题出在动态属性$scope.locale上,但我不知道如何避免这种情况。

问题是,如果我观察整个数组,我不知道什么值发生了变化。

试试这个:

var myWatcher = "data.localization." + $scope.locale +".properties[0].value";    
$scope.$watch(myWatcher, function () {
   //show/hide another texbox if I have a value
});

您可以使用手表中的函数来返回手表的值。尝试:

$scope.$watch(function () { return $scope.data.localization[$scope.locale].properties[0].value; } , function () {
   //show/hide another texbox if I have a value
});