如果语句在ng-click中

时间:2014-02-14 18:07:43

标签: javascript angularjs

有没有办法将条件置于ng-click中?在这里,如果有任何表单错误,我希望表单不会被提交,但是我得到了一个解析异常。

 <input  ng-click="{{if(profileForm.$valid) updateMyProfile()}}" name="submit" id="submit" value="Save" class="submit" type="submit">

我尝试使用ng-disabled但是我的验证插件不起作用因为表单根本就没有提交,所以它没有被触发。

7 个答案:

答案 0 :(得分:135)

不要在模板中放置任何条件表达式。

在Controller处进行。

模板:

<input ng-click="check(profileForm.$valid)" name="submit" 
       id="submit" value="Save" class="submit" type="submit">

控制器:

$scope.check = function(value) {
    if (value) {
       updateMyProfile();
    }
}

答案 1 :(得分:55)

这可能无关紧要,没有用,但是因为它是javascript,你不必在ng-click语句中使用上面建议的三元组。您还应该能够使用惰性求值(&#34;或die&#34;)语法。所以对于上面的例子:

<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上面提供的链接一样。

答案 2 :(得分:31)

这是一个我发现可能对你有用的黑客攻击,虽然它并不漂亮,但我个人很尴尬地使用这样一行代码:

ng-click="profileForm.$valid ? updateMyProfile() : alert('failed')"

现在,你必须思考'但如果我的profileForm无效,我不希望它提醒(“失败”)。那是丑陋的部分。对我来说,无论我在这个三元语句的else子句中加入什么,都不会被执行。

然而,如果它被删除了一个错误被抛出。所以你可以用无意义的警报来填充它 我告诉过你这很丑......但是当我做这样的事情时,我甚至没有任何错误 正如Chen-Tsu所提到的那样,这样做的正确方法是他们自己的。

答案 3 :(得分:11)

如果你必须这样做,这里有几种方法:

禁用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>

答案 4 :(得分:5)

我们可以有条件地添加ng-click事件而不使用禁用的类。

HTML:

  <input ng-click="profileForm.$valid && updateMyProfile()" name="submit" id="submit" value="Save" class="submit" type="submit">

答案 5 :(得分:5)

http://php.quicoto.com/inline-ifelse-statement-ngclick-angularjs/开始,如果您真的需要这样做,

ng-click="variable = (condition=='X' ? 'Y' : 'X')"

答案 6 :(得分:0)

写为

<input type="submit" ng-click="profileForm.$valid==true?updateMyProfile():''" name="submit" value="Save" class="submit" id="submit">