$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);
});
}
ただし、これは私が期待したようにイベントの発生を妨げませんでした。そのため、イベントを抑制する方法を探しています。