ユーザーが[保存]ボタンまたは[送信]ボタンの並べ替えをクリックしたときにフォームコントロールを無効にする(または少なくともユーザー操作で使用できないようにする)場合の最善の(そして正しい)アプローチについてのジレンマがありますそして、データがネットワーク上を移動します。 JQuery(これは悪!!!)を使用し、すべての要素を配列として(クラスまたは属性マーカーで)クエリしたくないこれまでのアイデアは次のとおりです。
cm-form-control
カスタムディレクティブですべての要素をマークします。次に、カスタムコードが2番目の通知をプッシュするか、約束を解決します。ng-show="loadingTracker.active()"
のような非常に愚かなコードを生成するように強制するpromiseTracker
を使用してください(残念ながら!)。明らかに、すべての要素にng-disabled
があるわけではなく、「ダンス」ボタンを避けるためにng-hide/show
を使用したくありません。誰かがより良いアイデアを持っていますか?前もって感謝します!
UPDATED:フィールドセットのアイデアは機能します。まだ同じことをしたい人のためのシンプルなフィドルがあります http://jsfiddle.net/YoMan78/pnQFQ/13/
HTML:
<div ng-app="myApp">
<ng-form ng-controller="myCtrl">
Saving: {{isSaving}}
<fieldset ng-disabled="isSaving">
<input type="text" ng-model="btnVal"/>
<input type="button" ng-model="btnVal" value="{{btnVal}}"/>
<button ng-click="save()">Save Me Maybe</button>
</fieldset>
</ng-form>
</div>
およびJS:
var angModule = angular.module("myApp", []);
angModule.controller("myCtrl", function ($scope, $filter, $window, $timeout) {
$scope.isSaving = undefined;
$scope.btnVal = 'Yes';
$scope.save = function()
{
$scope.isSaving = true;
$timeout( function()
{
$scope.isSaving = false;
alert( 'done');
}, 10000);
};
});
すべてのフィールドをfieldsetでラップし、次のようにngDisabledディレクティブを使用します。
<fieldset ng-disabled="isSaving"> ... inputs ...</fieldset>
フィールドセット内のすべての入力を自動的に無効にします。
次に、コントローラーで、$scope.isSaving
をhttp呼び出しの前にtrue
に設定し、その後にfalse
に設定します。