目前,我有一个文本输入附加到模型,其中$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);
});
}
但是,这并没有像我预期的那样阻止事件发生,这就是为什么我现在正在寻找一种方法来抑制事件。
答案 0 :(得分:1)
您可以使用一个变量来确定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;
});
}