Я программно обновить некоторые поля на моей форме со значением , и я хотел бы установить состояние поля в $dirty
. Сделать что-то вроде:
$scope.myForm.username.$dirty = true;
похоже, не работает.
Есть метод, $setPristine
который я могу использовать для сброса состояния поля, но его нет $setDirty
?
Так как же это сделать?
Я видел этот пост https://groups.google.com/forum/#!topic/angular/NQKGAFlsln4, но не могу найти $setDirty
метод. Я использую Angular версию 1.1.5.
$setDirty
полевой уровень.Ответы:
Начиная с AngularJS 1.3.4 вы можете использовать
$setDirty()
поля ( источник ). Например, для каждого поля с ошибкой, помеченного как обязательное, вы можете сделать следующее:источник
В вашем случае
$scope.myForm.username.$setViewValue($scope.myForm.username.$viewValue);
трюк делает свое дело - он загрязняет форму и поле и добавляет соответствующие классы CSS.Если честно, я нашел это решение в новом посте в теме по ссылке из вашего вопроса. У меня это сработало отлично, поэтому я помещаю это здесь как отдельный ответ, чтобы его было легче найти.
РЕДАКТИРОВАТЬ:
Вышеупомянутое решение лучше всего подходит для версии Angular до 1.3.3. Начиная с 1.3.4 вы должны использовать недавно открытый метод API
$setDirty()
изngModel.NgModelController
.источник
$scope.myForm.myField.$pristine = false; $scope.myForm.myField.$setViewValue(...)
. Похоже, что ответ ниже, в котором говорится, чтоfield.$setDirty()
было добавлено в Angular 1.3.4, будет лучшим решениемвам придется вручную установить
$dirty
значениеtrue
и$pristine
значениеfalse
для поля. Если вы хотите, чтобы классы отображались на вашем вводе, вам придется вручную добавлятьng-dirty
и удалятьng-pristine
классы из элемента. Вы можете использовать$setDirty()
на уровне формы, чтобы сделать все это в самой форме, но не на входах формы, входы формы в настоящее время не имеют,$setDirty()
как вы упомянули.Этот ответ может измениться в будущем, поскольку они должны добавляться
$setDirty()
к входным данным, что кажется логичным.источник
Если у вас есть доступ к NgModelController (вы можете получить доступ к нему только из директивы), вы можете вызвать
источник
Специально для вас создан jsFiddle, который решает эту проблему. просто установите для $ dirty значение true, но
$timeout 0
так, чтобы он запускался после загрузки DOM.Найдите здесь: JsFiddle
источник
Это то, что сработало для меня
источник
Вы можете использовать
$setDirty();
метод. См. Документацию https://docs.angularjs.org/api/ng/type/form.FormControllerПример:
источник
Вспомогательная функция для выполнения работы:
источник
Угловой 2
Для всех, кто хочет сделать то же самое в Angular 2, он очень похож, кроме получения формы
источник
Небольшое примечание к ответу @rmag. Если у вас есть пустые, но обязательные поля, которые вы хотите испортить, используйте это:
источник
Я не совсем уверен, почему вы пытаетесь пометить поля как грязные, но я оказался в аналогичной ситуации, потому что хотел, чтобы ошибки проверки появлялись, когда кто-то пытался отправить недопустимую форму. В итоге я использовал jQuery для удаления
.ng-pristine
тегов классов и добавления.ng-dirty
тегов классов в соответствующие поля. Например:источник