在angularjs中,我们有ng-disabled指令,为什么ng-enabled指令不是由框架提供的,因为我们有ng-show和ng-hide

在AngularJs ng-enabled指令不提供。 有没有正当的理由不在框架中提供该指令,因为我们既可以使用ng-hide ng-show ,也可以使用ng-hide来达到我们的目的。

这不会很好,只是检查ng-enabled="attribute.value === true"

而不是ng-disabled="!(attribute.value === true)"

这会增加代码的可读性。

在Angular中没有ngEnabled指令的原因是相当的语义 – 在HTML规范中根本就没有对应它。 同时已经有ngDisabled指令与disabled属性一起使用。 出于同样的原因,没有ngUnchecked指令,因为已经有ngChecked设置/删除checked属性。

现在,合理的问题是:为什么我们同时使用ngShowngHide ? 那么这只是为了方便,在这种情况下,我猜,因为同时使用ngShowngHide不会比单独使用ngHide更令人困惑,但同时它们也非常方便。

我不会错过任何启用ng的指令,我认为这对框架几乎没有任何作用。

input默认启用,HTMLinput也没有启用属性,只是一个禁用。 angular指令设置HTML禁用的属性,但在计算expression式之后。

你可以写

NG-禁用= “!attribute.value”

我认为这是相当可读的。

Angular根据ng-disabled中expression式的结果设置了disabled属性。 HTML5中没有启用属性,所以ng-Enabled将不起作用。

TLDR:改用angular度启用 。

核心团队在此expression了他们的观点: https : //github.com/angular/angular.js/issues/1252#issuecomment-49261373

他们不会因为拥有许多+ 1-s的function请求而不遵守这个function要求,以保持核心的臃肿。

但是,如果您仍然想要启用ngfunction,btford已经为您创build了这个方便的小模块: https : //github.com/btford/angular-enabled

这不是说这是为什么,而是为了那些想写自己的指令,在这里你去的问题的答案。 顺便说一句,它是咖啡的脚本

 .directive 'ngEnabled', [ '$parse' ($parse)-> dir = restrict: 'AC' link: ($scope, elem, attrs)-> getter = $parse attrs.ngEnabled $off = $scope.$watch -> getter $scope , (val)-> elem.attr 'disabled', !val $scope.$on '$destroy', -> $off() ] 

http://plnkr.co/edit/F4RG2v859oFtTumvgoGN?p=preview

这对我来说工作正常。 尝试这个 。

  ng-disabled="!(attribute.value)"