如何使ng-click事件有条件?

Alo*_*lon 113 html javascript angularjs

我在ng-repeat中有这个代码:

<a href="#" class="disabled" ng-click="doSomething(object)">Do something</a>
Run Code Online (Sandbox Code Playgroud)

如何设置按钮被禁用的条件class="disabled"

或者有没有办法在Javascript中这样做,所以看起来像:

$('.do-something-button').click(function(){
  if (!$(this).hasClass('disabled')) {
    do something
  }
});
Run Code Online (Sandbox Code Playgroud)

Val*_*nov 202

在除指令之外的任何地方使用DOM(包括检查属性)进行操作是不好的.您可以在范围中添加一些值,指示是否应禁用链接.

但其他问题是ngDisabled不能处理除表单控件之外的任何内容,因此您不能将它与<a>一起使用,但您可以将它与<button>一起使用并将其设置为链接.

另一种方法是使用表达式的惰性求值,isDisabled || action()如果isDisabled为真,则不会调用动作.

这里有两个解决方案:http://plnkr.co/edit/5d5R5KfD4PCE8vS3OSSx?p=preview

  • 所以得出结论:ng-click ="isDisabled || action()"就行了 (66认同)
  • 更好:`||`应该是`&&`,虽然它适用于你的插件,如果isDisabled是一个双管道继续检查有效表达式的方法."&&"不是这种情况 (27认同)
  • @polyclick逻辑然后也会改变.如果isDisabled返回true,则调用action(). (7认同)

Rub*_*ini 45

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

HTML:

<div ng-repeat="object in objects">
<span ng-click="!object.status && disableIt(object)">{{object.value}}</span>
</div>
Run Code Online (Sandbox Code Playgroud)


Nic*_*Res 6

我使用的&&表达式对我来说非常合适.

例如,

<button ng-model="vm.slideOneValid" ng-disabled="!vm.slideOneValid" ng-click="vm.slideOneValid && vm.nextSlide()" class="btn btn-light-green btn-medium pull-right">Next</button>
Run Code Online (Sandbox Code Playgroud)

如果vm.slideOneValid为false,则不触发表达式的第二部分.我知道这会将逻辑放入DOM,但这是一种快速的方法,可以使用ng-disabled和ng-click来放置好.

只需记住将ng-model添加到元素中以使ng-disabled工作.


Beg*_*ner 6

基本上ng-click首先检查isDisabled并根据其值决定是否应调用该函数。

<span ng-click="(isDisabled) || clicked()">Do something</span>
Run Code Online (Sandbox Code Playgroud)

或将其读作

<span ng-click="(if this value is true function clicked won't be called. and if it's false the clicked will be called) || clicked()">Do something</span>
Run Code Online (Sandbox Code Playgroud)