我试图了解问题在于我使用$ scope。$ watch,但我无法弄清楚为什么手表中定义的函数没有被触发。我在Angular材料中有多重选择:
<md-select multiple ng-model="selectedItems" placeholder="Please select">
<md-option ng-repeat="item in specialities" ng-value="item" ng-class="{'selected': item.selected}">
<ng-md-icon class="checkboxfull" icon="check_box" size="18"></ng-md-icon>
<ng-md-icon class="checkboxoutline" icon="check_box_outline_blank" size="18"></ng-md-icon>
{{item.name}}
</md-option>
</md-select>
并且在控制器中我正在为这个视图调用$ watch,这应该是我改编的selectedItems:
$scope.$watch('selectedItems', function(){
console.log("$scope.selectedItems: ",$scope.selectedItems);
$scope.filter.idList.length = 0;
angular.forEach($scope.selectedItems, function (item) {
$scope.filter.idList.push(item.id);
});
console.log("$scope.filter.idList: ",$scope.filter.idList);
});
但是永远不会到达日志,并且永远不会填充$ scope.filter.idList。我在stackoverflow上看到了使用此解决方案的其他示例,例如AngularJS: $watch for a select input。 感谢您指点我正确的方向!
答案 0 :(得分:1)
由于您似乎$watch
了一系列项目,请尝试为您的观看通话中的第三个参数指定true
,以便深入观察。
scope.$watch('data', function (newVal, oldVal) { /*...*/ }, true);
或者,请尝试$watchCollection
scope.$watchCollection('data', function (newVal, oldVal) { /*...*/ });
仅供参考这里已经讨论过:How to deep watch an array in angularjs?
答案 1 :(得分:0)