У меня есть дилемма относительно того, какой подход является лучшим (и правильным), если я хочу отключить элементы управления формы (или, по крайней мере, сделать их недоступными для взаимодействия с пользователем) в течение периода времени, когда пользователь нажимает кнопку типа «Сохранить» или «Отправить». и данные, передаваемые по сети. Я не хочу использовать 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);
};
});
javascript
forms
angularjs
submit
YoMan78
источник
источник
fieldset
его нельзя использовать в качестве контейнера flexboxОтветы:
Заверните все поля в FIELDSET и использовать ngDisabled директиву , как это:
Он автоматически отключит все входы внутри набора полей.
Затем в контроллере установлено
$scope.isSaving
значениеtrue
до http-вызова иfalse
после.источник
В современных браузерах есть простое решение:
определить класс css
добавить этот класс в
ng-form
Здесь есть указатель события поддержки диаграмма.
Примечание: даже если вы установили
pointer-events: none
, вы все равно можете использовать табуляцию для ввода элемента с клавиатуры.источник