В angularjs мы имеем директиву ng-disabled, почему директива ng-enabled не предоставляется каркасом, поскольку мы имеем ng-show и ng-hide
В директиве AngularJs ng-enabled
не указывается. Есть ли какая-то правильная причина не предоставлять эту директиву в рамках, потому что у нас есть как ng-show
, так и ng-hide
, когда вы можете просто использовать ng-hide
для достижения нашей цели.
Было бы неплохо просто проверить ng-enabled="attribute.value === true"
вместо ng-disabled="!(attribute.value === true)"
это увеличит читаемость кода.
Ответы
Ответ 1
Причина, по которой директива ngEnabled
в Angular отсутствует, скорее семантична - в спецификации HTML нет ничего, что соответствует ей. В то же время уже существует директива ngDisabled
, которая работает с атрибутом disabled
. По той же причине нет директивы ngUnchecked
, потому что уже существует ngChecked
, который устанавливает/удаляет атрибут checked
.
Теперь разумный вопрос: почему у нас есть как ngShow
, так и ngHide
? Ну, это просто для удобства в этом случае, я думаю, потому что наличие как ngShow
, так и ngHide
не более запутанно, чем ngShow
, но в то же время очень удобно иметь оба.
Ответ 2
Я не пропускаю директиву с поддержкой ng, и я думаю, что это ничего не добавит к структуре.
Входы включены по умолчанию, а входы HTML также не имеют активированного атрибута, а только отключено. Директива angular устанавливает атрибут отключенного HTML, но после оценки выражения.
Вы можете просто написать
нг отключенной = "! Attribute.value"
Я думаю, что это довольно читаемо.
Ответ 3
Angular устанавливает отключенный атрибут на основе результата выражения в ng-disabled. В HTML5 нет активированного атрибута, поэтому ng-Enabled не будет работать.
Ответ 4
TL;DR: вместо этого используйте angular-enabled.
Основная команда выразила свое мнение в этом комментарии: https://github.com/angular/angular.js/issues/1252#issuecomment-49261373
Они не будут выполнять запрос функции только потому, что у него есть много + 1-секунд, чтобы не допустить освобождения ядра.
Однако, если вы все еще хотите использовать функции ng-enabled, btford создал этот удобный небольшой модуль только для вас:
https://github.com/btford/angular-enabled
Ответ 5
Не то, чтобы это был ответ на вопрос "Почему", но для тех, кто хочет написать свою собственную директиву, здесь вы идете. BTW это в 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()
]
http://plnkr.co/edit/F4RG2v859oFtTumvgoGN?p=preview
Ответ 6
Это сработало для меня. Попробуйте это.
ng-disabled="!(attribute.value)"