В чем разница между обязательным и обязательным нг?

Ответы:

421

Элементы формы AngularJS ищут requiredатрибут для выполнения функций проверки. ng-requiredпозволяет вам установить requiredатрибут в зависимости от логического теста (например, требуется только поле B - скажем, номер студента - если поле A имеет определенное значение - если вы выбрали «студент» в качестве выбора )

Как пример <input required>и <input ng-required="true">по сути одно и то же

Если вам интересно, почему это так (а не просто make <input required="true">или <input required="false">), это связано с ограничениями HTML - requiredатрибут не имеет ассоциированного значения - его простое присутствие означает (согласно стандартам HTML), что элемент необходим - поэтому angular нужен способ установить / отменить требуемое значение ( required="false"будет недействительным HTML)

Тьяго Рольдао
источник
Как я могу удалить ng-required соответственно? Потому что я пробовал некоторые методы jquery безуспешно
themhz
28
Я не уверен, что понимаю вопрос. На практике вы никогда не используете ng-required = "true", а скорее ng-required = "scopedVariable" или ng-required = "scopeTruthTest ()", а также значение переменная / функция определяет, требуется ли элемент. Никогда не используйте jquery, чтобы связываться с этими вещами в угловых приложениях, иначе вы получите непредсказуемые результаты!
Tiago Roldão
Стоит отметить, что ng-required отображает сообщение об ошибке стиля всплывающей подсказки по умолчанию, говорящее «это поле обязательно», что не всегда желательно. Я ищу способ его выключить
Адам Спенс
2
На самом деле это не так. Не уверен, но я думаю, что вы имеете в виду проверку html5, которая автоматически создается большинством современных браузеров. Если вы хотите , чтобы взять под свой контроль над этим (отключение , что браузер делает) , вы можете добавить атрибут NOVALIDATE: <form method="post" action="/foo" novalidate>. Опять же, это атрибут html5, не связанный с angularJS.
Тьяго Рольдао
Я ожидал, что когда ng-requiredуказатель на переменную области / контроллера, Angular отслеживает ее изменения и соответственно устанавливает требуемый атрибут. Хотя в случае простого requiredатрибута HTML у вас нет такой гибкости. Нет? И пока мы на одну тему, о чем ng-attr-required? Это точно так же, как ng-required?
AsGoodAsItGets
78

Я хотел бы сделать дополнение для ответа Тиаго :

Предположим, вы скрываете элемент, используя ng-showи добавляя requiredатрибут к нему:

<div ng-show="false">
    <input required name="something" ng-model="name"/>
</div>

выдаст ошибку что-то вроде:

Неверный элемент управления формы с именем = '' не может быть сфокусирован

Это потому, что вы просто не можете навязать requiredпроверку hiddenэлементам. Использование ng-requiredупрощает условное применение требуемой проверки, что просто потрясающе !!

I_Debug_Everything
источник
13
Определенно хороший совет, и вы также можете использовать ng-ifвместо ng-show/ ng-hideчтобы обойти эту потенциальную проблему.
jkjustjoshing
1
Это должен быть принятый ответ. Если у вас есть скрытые элементы (ng-show = "false"), существует разница между ng-required = "true" и просто "required", как описано в этом ответе, и мы попали в горячую воду из-за этой разницы.
Иван Кривяков
17

Атрибут HTML required="required" является заявление сообщая браузеру , что это поле , необходимое для того , чтобы формы , чтобы быть действительным. ( required="required"это форма XHTML, просто использование requiredэквивалентно)

ANGULAR атрибут ng-required="yourCondition" означает «требуется копаться (yourCondition)» и устанавливает атрибут HTML динамически для вас в зависимости от вашего состояния.

Также отметим , что HTML - версия путает , это не возможно , чтобы написать нечто условное , как required="true"и required="false", только при наличии вопросов атрибутов (присутствующих означает истинный)! Здесь Angular поможет вам ng-required.

Кристоф Русси
источник
Да, к сожалению, браузер не позволяет выставлять true / false, вероятно, считается слишком техническим ...
Christophe Roussy