私はリモートサーバにデータを問い合わせる前に最初の2つのフィルタに影響する2つのフィルタを持っています。ドロップダウンとプロンプトを選択 - 短く空を選択
私には選択肢があり、そのオプションは$scope.locationCodes
です。この選択は別のドロップダウン(顧客)に依存します。顧客が選択されると、私はIDを持っていて、それを最初の関数で返された約束に渡します。
問題1:私は本当にすぐに(コードドロップダウンで)場所コードを選択するように行けば
できるだけ早く私は、顧客を選択すると、オプションは空白になります。ぼかしてからもう一度選択しようとすると、少し時間がかかることを示すオプションが表示されます。入力された配列のこの遅延を処理する最善の方法は何ですか?
コード:
HTML:
<select data-ng-options="locationCode in locationCodes"></select>
JS:
$scope.getShipAbbleLocations = function (terminalId) {
var customerId = $scope.customer.id;
return Service.getShipAbbleLocations(customerId, terminalId).then(function (data) {
getLocationCodes(data);
_.defer(function() {
$scope.$apply();
})
});
};
function getLocationCodes(data) {
for (var i = 0; i < data.locationCodes.length; i++) {
$scope.locationCodes.push(["(" + data.locationCodes[i].shipThruLocationCode + ")", data.locationCodes[i].shipThruLocationId]);
}
$scope.$apply();
}
問題2:
キッカーは、顧客が選択されるまで、コードのドロップダウンを無効にする必要があるということです。私はコントローラのタイムアウトに依存していたので、アレイをポピュレートするための時間を許す「イネーブル」の遅延を設定することでディスエーブルを処理しています。これはうまくいきますが、顧客を変更すると問題が表示され、最初の無効化のケースについて心配する必要はありません。
この遅延/非同期性を処理するためのタイムアウト(これはうまくいけば、angularjs /約束のよりよい理解を示す)より良い方法があるのだろうかと思います。
'ng-disabled ="!locationCodes ||!locationCodes.length "'をselectに追加するだけです。 –
初期ディスエーブル状態を気にせずに顧客を変更する必要はありません。元のシナリオはまだ – devdropper87
と表示されるので、顧客が変更された場合にのみ無効にする必要がありますか? –