簡體   English   中英

如何在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那個特定的觀看模型屬性不再是骯臟的?

我嘗試通過在適當的時候取消/重新注冊$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM