问题描述
我在 ng-repeat 中有这个代码:
<a href="#" class="disabled" ng-click="doSomething(object)">Do something</a>
当有 class="disabled"
时,如何使按钮被禁用。
如何使用该类在 HTML 中进行条件,
或者有一种方法可以在 javascript 中做到这一点:
$('.do-something-button').click(function(){
if (!$(this).hasClass('disabled')) {
do something
}
});
最佳解决方案
在除指令之外的任何地方使用 DOM(包括属性检查) 进行操作并不好。您可以向范围添加一些值,指示是否应禁用链接。
但是另一个问题是,ngDisabled 不适用于除表单控件之外的任何内容,因此您无法使用< a>,但您可以使用< button> 并将其作为链接。
另一种方法是使用 isDisabled || action()
等表达式的惰性评估,因此如果 isDisabled
为真,则动作不会被调用。
这里有两个解决方案:http://plnkr.co/edit/5d5R5KfD4PCE8vS3OSSx?p=preview
次佳解决方案
我们可以有条件地添加 ng-click 事件,而不使用 disabled 类。
HTML:
<div ng-repeat="object in objects">
<span ng-click="!object.status && disableIt(object)">{{object.value}}</span>
</div>
第三种解决方案
我使用&&& 对我来说完美的表达。
例如,
<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>
如果 vm.slideOneValid
为 false,表达式的第二部分不会被触发。我知道这是把逻辑放到 DOM 中,但它是一个很快的肮脏的方式来让 ng-disabled 和 ng-click 放置得很好。
只需记住将 ng-model 添加到元素,使 ng-disabled 工作。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。