Angular $watch - 只执行一次 watch 块
Angular $watch - execute watch block only once
我在 dropdown
值上有一个简单的 $watch
:
$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
值 1 被打印了两次,有没有办法告诉 angular 只执行一次 $watch
块?
简单回答:第一次成功后注销手表运行:
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
}
};
您可以通过测试参数来简单地测试 view
是否将首次设置(声明)或将要更改(由 select):
$scope.$watch('view'), function(newVal, oldVal) {
if (oldVal && oldVal != newVal) {
console.log(1)
}
}
我在 dropdown
值上有一个简单的 $watch
:
$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
值 1 被打印了两次,有没有办法告诉 angular 只执行一次 $watch
块?
简单回答:第一次成功后注销手表运行:
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
}
};
您可以通过测试参数来简单地测试 view
是否将首次设置(声明)或将要更改(由 select):
$scope.$watch('view'), function(newVal, oldVal) {
if (oldVal && oldVal != newVal) {
console.log(1)
}
}