У меня есть дилемма о том, какой лучший (и правильный) подход, если я хочу отключить элементы управления формой (или, по крайней мере, сделать их недоступными для взаимодействия с пользователем) в течение периода времени, когда пользователь нажимает на "Сохранить" или "Сохранить", Отправить "и данные, перемещающиеся по проводу. Я не хочу использовать JQuery (который является злом!!!) и запрашивать все элементы как массив (маркером или атрибутом) Идеи, которые я имел до сих пор:
- Отметьте все элементы с настраиваемой директивой
cm-form-control
, которая будет подписана на 2 уведомления: "отправлено данные" и "обработана данными". Затем пользовательский код отвечает за то, чтобы нажать второе уведомление или решить обещание. - Используйте
promiseTracker
, который (к несчастью!) обеспечивает получение крайне глупого кода, напримерng-show="loadingTracker.active()"
. Очевидно, что не все элементы имеютng-disabled
, и я не хочу, чтобы пользовательng-hide/show
избегал "танцевальных" кнопок. - Укусить пулю и использовать JQuery
Есть ли у кого-нибудь лучшее представление? Спасибо заранее!
ОБНОВЛЕНО: Идея fieldset работает. Вот простая скрипка для тех, кто все еще хочет сделать то же самое 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);
};
});