Ho un dilemma su quale sia l'approccio migliore (e corretto) se desidero disabilitare i controlli del modulo (o almeno renderli non disponibili per l'interazione dell'utente) durante un periodo di tempo in cui l'utente fa clic sul pulsante "Salva" o "Invia" e dati che viaggiano sul filo. Non voglio usare JQuery (che è malvagio !!!) e interrogare tutti gli elementi come array (per classe o indicatore di attributo) Le idee che ho avuto finora sono:
- Contrassegna tutti gli elementi con una
cm-form-control
direttiva personalizzata che si abbonerà a 2 notifiche: "dati inviati" e "dati elaborati". Quindi il codice personalizzato è responsabile del push della seconda notifica o della risoluzione di una promessa. - Usa
promiseTracker
che (sfortunatamente!) Impone di produrre codice estremamente stupido comeng-show="loadingTracker.active()"
. Ovviamente non tutti gli elementi hannong-disabled
e non voglio che l'utenteng-hide/show
eviti i pulsanti "danzanti". - Morde un proiettile e usa ancora JQuery
Qualcuno ha un'idea migliore? Grazie in anticipo!
AGGIORNATO: l'idea del fieldset FUNZIONA. Ecco un semplice violino per coloro che vogliono ancora fare lo stesso 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>
e 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
non può essere usato come contenitore FlexBox