0

目前我有一个附加到模型的文本输入,其中包含$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通过在适当的时间取消/重新注册手表来删除它,但这也不起作用。

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); 

        });
}

但是,这并没有像我预期的那样阻止事件触发,这就是为什么我现在正在寻找一种方法来抑制事件。

4

1 回答 1

1

You could have a variable that determines whether doSearch exits early, like so:

var searchActive = true;
function doSearch() {
    if (!searchActive) return;
    mySearchService.executeSearch(search.mySearchText)
        .then(function(res) {
            searchActive = false;
            // do manipulation of search.mySearchText
            searchActive = true;
        });
}
于 2016-01-15T01:13:16.640 回答