Answers:
除指令外,在任何地方都不能使用DOM(包括属性检查)进行操作。您可以在范围内添加一些值,该值指示是否应禁用链接。
但是另一个问题是ngDisabled除了表单控件之外不能在其他任何东西上使用,因此您不能将其与<a>一起使用,但是可以将其与<button>一起使用并将其设置为链接样式。
另一种方法是使用表达式的惰性求值,例如isDisabled || action()
,如果isDisabled
为true,则不调用动作。
这里有两个解决方案:http : //plnkr.co/edit/5d5R5KfD4PCE8vS3OSSx?p=preview
||
应该是&&
,尽管它可以在您的插件中使用,但是如果isDisabled是双管道继续检查有效表达式的方法。&&
isDisabled()
返回false,则action()
不会调用它,也不会继续检查“寻找有效的表达式”。
我使用了&&表达式,它非常适合我。
例如,
<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禁用和ng-click放置良好的一种肮脏方法。
只需记住将ng-model添加到元素中即可禁用ng。
您可以尝试使用ng-class
。
这是我的简单示例:http :
//plnkr.co/edit/wS3QkQ5dvHNdc6Lb8ZSF?p=preview
<div ng-repeat="object in objects">
<span ng-class="{'disabled': object.status}" ng-click="disableIt(object)">
{{object.value}}
</span>
</div>
状态是对象的自定义属性,您可以随意命名。
该disabled
中ng-class
是一个CSS类名,object.status
应该是true
或false
您可以在function中更改每个对象的状态disableIt
。
在您的控制器中,您可以执行以下操作:
$scope.disableIt = function(obj) {
obj.status = !obj.status
}