在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
属性。
现在,合理的问题是:为什么我们同时使用ngShow
和ngHide
? 那么这只是为了方便,在这种情况下,我猜,因为同时使用ngShow
和ngHide
不会比单独使用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() ]
这对我来说工作正常。 尝试这个 。
ng-disabled="!(attribute.value)"