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

Проверить наличие атрибута в директиве Angular

Можно проверить, присутствует ли данный атрибут в директиве, в идеале с использованием области выделения или в худшем случае объект атрибутов.

С директивой, которая выглядит примерно так: <project status></project>, я хочу условно отобразить значок состояния, но только если присутствует атрибут состояния.

return {
  restrict: 'AE',
  scope: {
    status: '@'
  },
  link: function(scope, element, attrs) {
    scope.status === 'undefined'
  }
}

В идеале, он будет привязан к области видимости, чтобы ее можно было использовать в шаблоне. Однако значение связанной переменной undefined. То же самое относится к & только для чтения и = двусторонним привязкам.

Я знаю, что это тривиально разрешено, добавив <project status='true'></project>, но для директив, которые я буду использовать часто, я бы предпочел не делать этого. (Действительность XHTML, это не проблема).

4b9b3361

Ответ 1

Способ сделать это - проверить наличие атрибутов в параметре attrs функции link и назначить это переменным в пределах области выделения директивы.

scope:{},
link: function(scope, element, attrs){
  scope.status = 'status' in attrs;
},

Это должно работать без использования оператора if в вашей функции ссылок.

Ответ 2

Способ сделать то, что вы хотите, - это посмотреть объект атрибута в функции ссылки:

link: 
  function(scope, element, attrs) {
    if("status" in attrs)
       //do something
  }

Ответ 3

Чтобы проверить атрибуты при использовании компонентов angular 1.5+, вы можете использовать крюк жизненного цикла $postLink и службу $element, например:

constructor(private $element) {}

$postLink() {
  if(!this.$element.attr('attr-name')){
    // do something
  }
}

Ответ 4

Так как значение attrs является типом javascript object. Чтобы проверить существование атрибута, мы можем также использовать метод hasOwnProperty() вместо ключевого слова in.

Таким образом, это может быть:

link: function(scope, element, attrs) {
  var is_key_exist = attrs.hasOwnProperty('status');//Will return true if exist
}

Вы можете дополнительно прочитать разницу между in ключевым словом и hasOwnProperty() методом на этой ссылке