如何在 Angular 中抑制监视语句或摘要循环
How to suppress a watch statement or digest cycle in Angular
目前我有一个文本输入附加到一个模型,其中有一个 $scope.watch
语句观察模型。这都是用来实现一种自动完成/提前输入的功能。
<!-- HTML -->
<input type="text" ng-model="search.mySearchText">
// JS
var deregister = $scope.$watch('search.mySearchText', doSearch);
function doSearch() {
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
// do something with the data
});
}
这很好用。但是,偶尔在我的 .then
函数中我想对 search.mySearchText
进行更改。显然这会导致观察者再次被解雇,但我不想这样。
我希望做的是找到一种方法来抑制 $watch
下次发射。也许通过某种方式告诉 Angular 特定观察模型 属性 不再脏?
我尝试通过 de/re- 在适当的时间注册手表来删除 $watch
,但这也没有用。
function doSearch() {
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
deregister(); // shut off the watch
search.mySearchText = 'some new string'; // manipulate the model property that I don't want to cause a search
deregister = $scope.$watch('search.mySearchText', doSearch);
});
}
但是,这并没有像我预期的那样阻止事件触发,这就是为什么我现在正在寻找一种方法来抑制事件。
您可以有一个变量来确定 doSearch
是否提前退出,如下所示:
var searchActive = true;
function doSearch() {
if (!searchActive) return;
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
searchActive = false;
// do manipulation of search.mySearchText
searchActive = true;
});
}
目前我有一个文本输入附加到一个模型,其中有一个 $scope.watch
语句观察模型。这都是用来实现一种自动完成/提前输入的功能。
<!-- HTML -->
<input type="text" ng-model="search.mySearchText">
// JS
var deregister = $scope.$watch('search.mySearchText', doSearch);
function doSearch() {
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
// do something with the data
});
}
这很好用。但是,偶尔在我的 .then
函数中我想对 search.mySearchText
进行更改。显然这会导致观察者再次被解雇,但我不想这样。
我希望做的是找到一种方法来抑制 $watch
下次发射。也许通过某种方式告诉 Angular 特定观察模型 属性 不再脏?
我尝试通过 de/re- 在适当的时间注册手表来删除 $watch
,但这也没有用。
function doSearch() {
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
deregister(); // shut off the watch
search.mySearchText = 'some new string'; // manipulate the model property that I don't want to cause a search
deregister = $scope.$watch('search.mySearchText', doSearch);
});
}
但是,这并没有像我预期的那样阻止事件触发,这就是为什么我现在正在寻找一种方法来抑制事件。
您可以有一个变量来确定 doSearch
是否提前退出,如下所示:
var searchActive = true;
function doSearch() {
if (!searchActive) return;
mySearchService.executeSearch(search.mySearchText)
.then(function(res) {
searchActive = false;
// do manipulation of search.mySearchText
searchActive = true;
});
}