2014-12-04 3 views
6

Я написал директиву с областью выделения.Атрибут без значения в директиве AngularJS

app.directive('myDirective', function() { 
    return { 
     restrict: 'E', 
     scope { 
      attr1: '@', 
      attr2: '@', 
      noValueAttr: // what to put here? 
     }, 
     link: function(scope, elem, attrs) { 
      // how to check here if noValueAttr is present in mark-up? 
     } 
    }; 
}); 

HTML, может быть

<my-directive attr1='...' attr='...' ... no-value-attr> 

или

<my-directive attr1='...' attr='...' > 

Мне интересно, как использовать (и есть директива обнаружить, если он там или нет) необязательный атрибут, который имеет не присвоенное значение. Благодарю.

ответ

18

Просто используйте attrs.hasOwnProperty('noValueAttr') в функции связи, чтобы проверить, присутствует ли этот атрибут.

Не забывайте, что атрибутом в разметке будет no-value-attr, а не noValueAttr, как вы показали.

link: function(scope, elem, attrs) { 
      if (attrs.hasOwnProperty('noValueAttr')) 
       // attribute is present 
      else 
       // attribute is not present 

    } 
+0

Нужно поместить 'noValueAttr' в точечном объеме? Если это так, что бы я разместил после двоеточия в 'noValueAttr: ...'? – menorah84

+3

@ menorah84: Нет. Вам не обязательно – geckob

+2

@ menorah84 Вам не нужно размещать все атрибуты в объекте определения области выделения. Я склоняюсь к тому, чтобы сохранить все константные атрибуты счисления и атрибуты boolean/no-value. Вместо этого используйте 'attrs'. – GregL

0

Я знаю, что это старый вопрос, но есть то, что способ:

link: function(scope, elem, attrs) { 
    scope.noValueAttr = scope.$eval(attrs.noValueAttr) || 'default value'; 
} 
Смежные вопросы