javascript - reactivos - En angularjs tenemos una directiva ng-disabled, ¿por qué el marco no proporciona la directiva ng-enabled ya que tenemos ng-show y ng-hide?
validar formulario angular 5 (6)
En AngularJs no se proporciona la directiva
ng-enabled
.
¿Hay alguna razón adecuada para no proporcionar esa directiva en el marco, porque tenemos tanto
ng-show
como
ng-hide
cuando puedes usar
ng-hide
para lograr nuestro objetivo?
No sería bueno verificar
ng-enabled="attribute.value === true"
en lugar de
ng-disabled="!(attribute.value === true)"
aumentará la legibilidad del código.
TLDR: utilice github.com/btford/angular-enabled lugar.
El equipo central expresó su opinión en este comentario: https://github.com/angular/angular.js/issues/1252#issuecomment-49261373
No aceptarán una solicitud de función solo porque tiene muchos + 1-s para mantener libre la hinchazón principal.
Sin embargo, si aún desea tener la funcionalidad ng-habilitada, btford ha creado este pequeño y práctico módulo solo para usted: github.com/btford/angular-enabled
Angular establece el atributo desactivado en función del resultado de la expresión en ng-disabled. No hay un atributo habilitado en HTML5, por lo que ng-Enabled no funcionaría.
Esta línea funcionó para mí.
ng-disabled="!attribute.value"
La razón por la que no hay
ngEnabled
directiva
ngEnabled
en Angular es bastante semántica: simplemente no hay nada que le corresponda en la especificación HTML.
Al mismo tiempo, ya
ngDisabled
directiva
ngDisabled
que funciona con el atributo
disabled
.
Por la misma razón, no existe una directiva
ngUnchecked
, porque ya hay
ngChecked
que establece / elimina el atributo
checked
.
Ahora, la pregunta razonable: ¿por qué tenemos
ngShow
y
ngHide
entonces?
Bueno, es solo por conveniencia en este caso, supongo, porque tener tanto
ngShow
como
ngHide
no es más confuso que
ngShow
solo, pero al mismo tiempo es muy útil tener ambos.
No es que esta sea una respuesta a la pregunta de por qué, sino para aquellos que quieren escribir su propia directiva, aquí está. Por cierto, está en coffeescript .
.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()
]
No me falta ninguna directiva habilitada para ng y creo que agregaría poco o nada al marco.
Las entradas están habilitadas por defecto y las entradas HTML tampoco tienen un atributo habilitado, solo un deshabilitado. La directiva angular establece el atributo HTML deshabilitado, pero después de evaluar una expresión.
Solo puedes escribir
ng-disabled = "! attribute.value"
Creo que es bastante legible.