如果在ng-click语句中

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

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

我试图使用ng禁用,但然后我的validation插件不起作用,因为forms永远不会提交,所以它不会被触发。

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

在控制器上执行。

模板:

 <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语句中提到的三元组。 你也应该可以使用懒惰的评估(“或死”)语法。 所以对于上面的例子:

 <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"> 

在这种情况下,如果configuration文件无效,则不会有任何反应,否则,调用updateMyProfile()。 就像@falinsky上面提供的链接一样。

下面是我发现的一个黑客可能会为你工作,虽然它不漂亮,我个人会尴尬使用这样的代码行:

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

现在,你一定在想,但是如果我的profileForm无效,我不希望它提醒(“失败”)。 那这是丑陋的一部分。 对我而言,无论我在这个三元陈述的其他条款中join了什么,都不会被执行。

但是,如果它删除了一个错误抛出。 所以你可以用一个毫无意义的警报填充它。
我告诉过你这很丑陋,但是当我做这样的事时,我甚至不会有任何的错误。
这样做的正确方法就像陈素贞所说的那样,但是对于他们自己来说。

如果你必须这样做,下面是几种方法:

禁用ng-disablebutton

迄今为止最简单的解决scheme。

 <input ng-disabled="!profileForm.$valid" ng-click="updateMyProfile()" ... > 

用ng-if隐藏button(并显示其他内容)

如果你显示/隐藏一些复杂的标记可能会好起来的。

 <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 …)

两者的混合

与button所在的用户进行通信(他不再寻找它),但解释为什么它不能被点击。

 <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')" 

你可以把条件标签内。 尝试:

 ng-class="{true:'active',false:'disable'}[list_status=='show']"