J'ai le dilemme de savoir quelle est la meilleure (et correcte) approche si je veux désactiver les contrôles de formulaire (ou au moins les rendre indisponibles pour une interaction utilisateur) pendant une période de temps où l'utilisateur clique en quelque sorte sur le bouton "Enregistrer" ou "Soumettre" et les données voyageant sur le fil. Je ne veux pas utiliser JQuery (ce qui est diabolique !!!) et interroger tous les éléments sous forme de tableau (par classe ou marqueur d'attribut) Les idées que j'ai eues jusqu'à présent sont les suivantes:
cm-form-control
qui souscrira à deux notifications: "données envoyées" et "données traitées". Ensuite, le code personnalisé est responsable de l'envoi d'une deuxième notification ou de la résolution d'une promesse.promiseTracker
qui (malheureusement!) Oblige à produire un code extrêmement stupide comme ng-show="loadingTracker.active()"
. Évidemment, tous les éléments n’ont pas ng-disabled
et je ne veux pas que l’utilisateur ng-hide/show
évite les boutons "Danse".Quelqu'un a-t-il une meilleure idée? Merci d'avance!
UPDATED: L'idée de l'ensemble de champs fonctionne. Voici un violon simple pour ceux qui veulent toujours faire la même chose 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>
et 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);
};
});
Enveloppez tous vos champs dans fieldset et utilisez la directive ngDisabled comme ceci:
<fieldset ng-disabled="isSaving"> ... inputs ...</fieldset>
Il désactivera automatiquement toutes les entrées dans le fieldset.
Ensuite, dans le contrôleur, réglez $scope.isSaving
sur true
avant l'appel http et sur false
après.