<div class="category">
<div ng-dropdown-multiselect="" options="categories" selected-model="selectedCategories" extra-settings="categoriesSettings" translation-texts="customTexts"></div>
</div>
$scope.$watch('selectedCategories', function(newValue, oldValue){
console.log(newValue);
console.log(oldValue);
$scope.loadPosts();
}, true);
$scope.$watch('selectedCities', function(newValue, oldValue) {
console.log(newValue);
console.log(oldValue);
$scope.loadPosts();
}, true);
最初加载页面时触发了这两个手表。它是否应该在页面加载时没有触发并且数组没有被更改?
答案 0 :(得分:1)
来自Angular Docs(就在第一个例子之前)
在观察者注册范围后,监听器fn是 异步调用(通过$ evalAsync)来初始化观察者。在 在极少数情况下,这是不可取的,因为在何时调用侦听器 watchExpression的结果没有改变。检测这种情况 在监听器fn中,您可以比较newVal和oldVal。如果 这两个值是相同的(===)然后监听器被调用 初始化。
您可以检查newValue!== oldValue是否可以阻止它或创建阻止第一次检查的变量。
答案 1 :(得分:1)
这是正确的观察者的行为。在回调中添加if (angular.equals(newValue, oldValue)) { return; }
将解决您的问题。