Ich habe ein Dilemma darüber, was der beste (und richtige) Ansatz ist, wenn ich Formularsteuerelemente während eines Zeitraums, in dem der Benutzer auf die Schaltfläche "Speichern" oder "Senden" klickt, deaktivieren (oder zumindest für die Benutzerinteraktion nicht verfügbar machen) möchte und Daten, die über das Kabel übertragen werden. Ich möchte JQuery nicht verwenden (was böse ist !!!) und alle Elemente als Array abfragen (nach Klassen- oder Attributmarker). Die Ideen, die ich bisher hatte, sind:
- Markieren Sie alle Elemente mit einer
cm-form-control
benutzerdefinierten Direktive, die zwei Benachrichtigungen abonniert: "Daten gesendet" und "Daten verarbeitet". Dann ist der benutzerdefinierte Code dafür verantwortlich, die zweite Benachrichtigung zu senden oder ein Versprechen zu lösen. - Verwenden Sie
promiseTracker
das (leider!) Erzwingt, um extrem dummen Code wie zu produzierenng-show="loadingTracker.active()"
. Offensichtlich haben nicht alle Elementeng-disabled
und ich möchte nicht, dass Benutzerng-hide/show
"tanzende" Schaltflächen vermeiden. - Beißen Sie eine Kugel und verwenden Sie immer noch JQuery
Hat jemand eine bessere Idee? Danke im Voraus!
AKTUALISIERT: Die Fieldset-Idee funktioniert. Hier ist eine einfache Geige für diejenigen, die immer noch das Gleiche tun möchten: 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>
und 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
nicht als Flexbox Behälter verwendet werden kann