Подтвердить что ты не робот

В 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)"

это увеличит читаемость кода.

4b9b3361

Ответ 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)"