我在$watch
值上有一个简单的dropdown
:
$scope.view;
$scope.$watch('view', function(){
console.log(1);
// watch block
}
该值与ng-model
链接:
<select ng-model="view" ng-options="x for x in name">
</select>
由于$digest
值打印两次,有没有办法告诉angular只执行一次$watch
块?
答案 0 :(得分:1)
简单回答:在第一次成功运行后取消注册手表:
var viewWatch = $scope.$watch('view', function () {
viewWatch(); // Stops the watch
console.log(1);
//watch block
};
然而,这可能会或可能不会产生您想要的结果,因为有时在初始化时调用$watch
。您可能想要设置一些条件:
var viewWatch = $scope.$watch('view', function (currentValue, oldValue) {
if (currentValue && !oldValue) {
viewWatch(); // Stops the watch
console.log(1);
//watch block
}
};
答案 1 :(得分:1)
您可以通过测试参数来测试是否第一次设置view
(声明)或即将更改(通过选择):
$scope.$watch('view'), function(newVal, oldVal) {
if (oldVal && oldVal != newVal) {
console.log(1)
}
}