Подтвердить что ты не робот

AngularJS: кнопка включения при изменении ввода формы

У меня есть приложение с большим количеством настроек на длинных страницах. Вы должны перейти на страницы, чтобы просмотреть текущие настройки или обновить их.

Я хотел бы сделать так, чтобы кнопка "Обновить" была включена только в том случае, если кто-то действительно меняет текущие входы.

Моим наивным подходом было бы добавить атрибут ng-change для каждого входа, который устанавливает флаг enableButton

<form name='form' ng-submit="submit()">
   <input type="sometype" ng-model='something1' ng-change="formChanged=true"></input>
   ...
   <input ng-model='somethingN' ng-change="formChanged=true"></input>
   <button ng-disabled="!formChanged" type="submit" />
</form>

но это кажется утомительным и повторяющимся (у нас много вариантов), и надеялся на что-то простое (что-то вроде "form. $hasChanged"...)

4b9b3361

Ответ 1

Вместо того, чтобы устанавливать флаг n изменения любого ввода формы, вы должны использовать angular встроенное свойство $dirty на объекте контроллера формы. Он сообщает, взаимодействовал ли пользователь с элементами формы.

<form name='form' ng-submit="submit()">
   <input name="some1" type="sometype" ng-model='something1' ></input>
   ...
   <input name="some2" ng-model='somethingN' ></input>
   <button ng-disabled="!form.$dirty" type="submit" />
</form>

Используя флаг $pristine, вы можете сделать

<button ng-disabled="form.$pristine" type="submit" />

Аналогично, если у вас есть валидаторы в форме, вы также можете использовать свойство $valid, например, отключите кнопку, если форма недействительна или нет

<button ng-disabled="form.$pristine|| form.$invalid" type="submit" />