[英]Will Angular reevaluate identical $watch expressions in the same $digest cycle?
[英]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那個特定的觀看模型屬性不再是骯臟的?
我嘗試通過在適當的時候取消/重新注冊$watch
來刪除$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;
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.