调用后在angularjs中取消绑定$ watch
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用后在angularjs中取消绑定$ watch相关的知识,希望对你有一定的参考价值。
我知道你可以解开像这样的$ watch:
var listener = $scope.$watch("tag", function () {});
// ...
listener(); // would clear the watch
但你可以在手表功能声明中取消绑定手表吗?因此,在手表执行一次后,它会自行解除绑定吗?就像是:
$scope.$watch("tag", function () {
unbindme()
});
答案
你可以像你现在一样做,在你的功能中调用“注销”:
var unbind = $scope.$watch("tag", function () {
// ...
unbind();
});
另一答案
因为tag
是一个表达式,所以一旦收到值,就可以使用one-time binding取消绑定:
$scope.$watch("::tag", function () {});
angular
.module('app', [])
.controller('example', function($scope, $interval) {
$scope.tag = undefined
$scope.$watch('::tag', function(tag) {
$scope.tagAsSeen = tag
})
$interval(function() {
$scope.tag = angular.isDefined($scope.tag) ? $scope.tag + 1 : 1
}, 1000)
})
angular.bootstrap(document, ['app'])
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body ng-controller="example">
Tag: {{tag}}
<br>
Watch once result: {{tagAsSeen}}
</body>
</html>
另一答案
bindonce指令可能是你需要的。
https://github.com/Pasvaz/bindonce
另一答案
var unbindMe=$scope.$watch('tag',function(newValue){
if(newValue){
unbindMe()
}
})
另一答案
就像similar question一样,对@Kris的回答略有改进会让你在整个项目中更加时尚和可重复使用。
.run(function($rootScope) {
$rootScope.see = function(v, func) {
var unbind = this.$watch(v, function() {
unbind();
func.apply(this, arguments);
});
};
})
现在感谢范围原型继承,你可以简单地去
$scope.see('tag', function() {
//your code
});
而且根本不担心解除绑定。
以上是关于调用后在angularjs中取消绑定$ watch的主要内容,如果未能解决你的问题,请参考以下文章