私は入力テキストフィールド(Googleの検索フィールドによく似ています)を持っていて、変更されたときにリクエストをトリガーして結果を表示するとします。例えばAngularJS - 約束をキャンセルするには?
、入力中Dog
で
レッツ・タイプ:今
typed D -> Calls ctrl.search('D') -> Makes a request -> Changes model when success
typed DO -> Calls ctrl.search('DO') -> Makes a request -> Changes model when success
typed DOG -> Calls ctrl.search('DOG') -> Makes a request -> Changes model when success.
、の
DO
要求は後で
DOG
1よりも応答することとしましょう。
DOG
と入力しても、私のモデルは
DO
の結果になります。
これは、文字を入力し続けると現在の進行中のリクエストをキャンセルまたは中止する方法が必要です。そうすれば、私のモデルは最終的な要求によってのみ変更されます。
私の入力は、次のようになります。ここでは
<input type="text" class="form-control" data-ng-model="query" data-ng-change="ctrl.search(query)" placeholder="Search" />
は私のsearchCtrl.js
次のとおりです。
var search;
var language;
var _this;
var SearchCtrl = function (searchService, lang)
{
search = searchService;
langauge = lang;
_this = this;
}
SearchCtrl.prototype.search = function (text)
{
var promise = search.language(language)
.facet('characters')
.highlight('quotes')
.query(text);
promise.then(function (response) {
if(!response) return;
_this.total = response.total;
_this.count = response.found;
_this.result = response.data;
});
}
我々は 'reject'または'それを完了するためにそれをresolve'する必要がありpromise..eitherをキャンセルすることはできません.. –
1)あなたのテキストボックスにdebounceを使用すると、ng-model-optionsを使うことができます。2)httpオプションのtimeoutプロパティに約束することができます。 (遅延オブジェクトを拒否することによって)キャンセルすることができますが、要求は依然としてサーバーによって処理され、クライアントレベルで拒否されます。 – PSL
タイピングの一時停止が発生するまで、最初にリクエストを送信しないことでこれを解決する方がよいでしょう。要求をキャンセルしても、サーバーはすでに要求を受信していれば、サーバーの処理を停止しません。 debounceオプションをhttps://docs.angularjs.org/api/ng/directive/ngModelOptions specficallyに見てください。 –