Angular Js:如何有条件地禁用所有按钮和链接?

4

我在控制器中有一个条件。如果条件返回true,那么我必须禁用所有链接和ng-click

我们应该怎么做:

Controller : $scope.disableActions = true;

在HTML中

<button type="button" ng-click="ignoreAndRedisplay()" ng-disabled="disableActions">OpenClick</button>

所以如果我这样做,就必须在每个地方写上 ng-disabled="disableActions" ,这样会很冗余。我们如何改进这个问题,使它适用于 n 个按钮和链接?

6个回答

8

我建议你在这种情况下,将所有按钮放在一个单独的fieldset中,并在该fieldset上应用ng-disabled,如果ng-disabled表达式评估为true,则该字段集内部的控件将自动被禁用。

<fieldset ng-disabled="disableActions">
   <button type="button" ng-click="ignoreAndRedisplay()">OpenClick</button>
   <button type="button" >Some Other button</button>
   <button type="button" >One more button</button>
   ...
</fieldset>

这里是演示


根据您的评论,您想要禁用锚点标签。基本上您无法禁用锚点标签。您可以尝试下面的方法来让它起作用。

fieldset[disabled] a { 
   pointer-events: none;
}

Plunker


4
这句话的意思是“那很新颖/别出心裁”,最后的“+1 :)”表示赞同或喜欢。 - tanmay
@PankajParkar,它适用于除了位于<table>标签内的元素之外的所有元素。 - Ravi Ubana
同意@PankajParkar,但在我的情况下,我将禁用完整的filed-set。 情况1:在filed-set中,我能够禁用所有链接。 情况2:在filed-set中,我无法禁用位于表格标记下的链接。 - Ravi Ubana
1
@RaviUbana,你没有理解核心问题。你不能禁用锚标签。所以fieldset怎么能替你做这件事呢?你必须手动处理一些工作。你可以添加CSS规则来解决问题:fieldset[disabled] a { pointer-events: none; } - Pankaj Parkar
请查看此更新的 plunker - Pankaj Parkar
显示剩余3条评论

1
你可以尝试创建自己的指令,但像JinsPeter所说的那样,ng-disabled是正确的方式。

1

是的,您需要在编写这些按钮时到处写上ng-disabled。所以这是正确的做法。它是否多余请自行判断。


1

ng-disabled是正确的做法。它是否多余?

如果您有n个链接和按钮,请使用这种不好的做法,使用disabled属性:

$watch('disableAction',function(value){
   if(value==true){ 
    //use a selector here to select all your a and button elts and add a 
    //disabled="disabled" attribute.
   }
   else {
   // remove that disabled attribute
   }
});

0

ng-disabled 是最好的选择。$scope.disableActions 可以在多个地方使用,并影响所有地方。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.min.js"></script>
<body ng-app ng-init="disableActions = false">
<button ng-disabled="!disableActions">OpenClick</button>
<button ng-disabled="!disableActions">Second Click</button>
<button ng-disabled="!disableActions">Third Click</button>
<button type="button" ng-click="disableActions = !disableActions">Enable/Disable</button>
</body>


0

在所有链接上放置ng-disabled会导致性能问题,但这是正确的做法。但如果您不想进行某些UI更改,可以在控制器中正确执行。

$scope.ignoreAndRedisplay = function () {
    if ($scope.disableActions) return;
    // your code here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接