если заявление в НГ-нажмите
есть ли способ поставить условие внутри ng-click? Здесь я хочу, чтобы форма не была отправлена, если есть какие-либо ошибки формы, но тогда я получил исключение parse.
<input ng-click="{{if(profileForm.$valid) updateMyProfile()}}" name="submit" id="submit" value="Save" class="submit" type="submit">
Я попытался использовать ng-disabled, но тогда мой плагин проверки не работает, потому что форма никогда не отправляется вообще, поэтому она не запускается.
8 ответов:
не помещайте выражение условия в шаблон.
сделайте это на контроллере.
шаблон:
:<input ng-click="check(profileForm.$valid)" name="submit" id="submit" value="Save" class="submit" type="submit">
$scope.check = function(value) { if (value) { updateMyProfile(); } }
это может быть неуместно и бесполезно, но поскольку это javascript, вам не нужно использовать тернарный, как предлагалось выше в инструкции ng-click. Вы также должны иметь возможность использовать синтаксис lazy evaluation ("или die"). Так что для вашего примера выше:
<input ng-click="{{if(profileForm.$valid) updateMyProfile()}}" name="submit" id="submit" value="Save" class="submit" type="submit">
станет:
<input ng-click="profileForm.$valid && updateMyProfile()" name="submit" id="submit" value="Save" class="submit" type="submit">
в этом случае, если профиль недействителен, то ничего не происходит, в противном случае вызывается updateMyProfile (). Как и в ссылке @falinsky, приведенной выше.
вот хак, который я обнаружил, что может работать для вас, хотя это не очень красиво, и мне лично было бы неловко использовать такую строку кода:
ng-click="profileForm.$valid ? updateMyProfile() : alert('failed')"
теперь вы, должно быть, думаете:"но я не хочу, чтобы он предупреждал ("не удалось"), если мой
profileForm
не действительным. Ну, это уродливая часть. Для меня, независимо от того, что я помещаю в предложение else этого тернарного оператора, никогда не выполняется.но если его удалили ошибка выбрасывается. Так что вы можете просто набить его бессмысленно тревога.
Я же говорил, что это ужасно... но я даже не получаю никаких ошибок, когда я делаю что-то вроде этого.
Правильный способ сделать это, как упоминал Чэнь-Цзы, но каждому свое.
если вы действительно должны сделать это таким образом, вот несколько способов сделать это:
отключение кнопки с помощью ng-disabled
безусловно, самое простое решение.
<input ng-disabled="!profileForm.$valid" ng-click="updateMyProfile()" ... >
скрывая кнопку (и показывая что-то еще) с помощью ng-if
может быть нормально, если вы показываете/скрываете какую-то сложную разметку.
<div ng-if="profileForm.$valid"> <input ng-click="updateMyProfile()" ... > </div> <div ng-if="!profileForm.$valid"> Sorry! We need all form fields properly filled out to continue. </div>
(помните, нет
ng-else
...)сочетание
связь с пользователем, где находится кнопка (он больше не буду искать его), но объясните, почему его нельзя щелкнуть.
<input ng-disabled="!profileForm.$valid" ng-click="updateMyProfile()" ... > <div ng-if="!profileForm.$valid"> Sorry! We need all form fields properly filled out to continue. </div>
мы можем добавить событие ng-click условно без использования отключенного класса.
HTML:
<input ng-click="profileForm.$valid && updateMyProfile()" name="submit" id="submit" value="Save" class="submit" type="submit">
от http://php.quicoto.com/inline-ifelse-statement-ngclick-angularjs/, Вот как вы это делаете, если вам действительно нужно:
ng-click="variable = (condition=='X' ? 'Y' : 'X')"