2016-03-14 2 views
0

У меня есть следующий кодПроверьте, директива имеет атрибут

<my-directive></my-directive> 

, и я хочу, чтобы оценить следующий Тренари внутри него:

{{ $scope.my-option ? 'YES' : 'NO' }} 

так:

<my-directive my-option></my-directive> 

Как я могу сделать это? Он должен оценивать true, как только у меня есть атрибут, правильно? Я уже привязал атрибут знаком =.

+0

проверить его в ссылке функция директивы: link: function (scope, elem, attr) {} –

ответ

1

Не следует указывать для $scope.my-option здесь, но для $scope.myOption.

Атрибуты CamelCased только в виде змеи в HTML-коде; на них следует ссылаться с помощью camelCase во всех остальных источниках JavaScript.

Итак, ваш HTML тег должен быть как:

<my-directive my-option></my-directive> 

Но ваше выражение AngularJS будет:

{{ $scope.myOption ? 'YES' : 'NO' }} 

$scope может даже не понадобиться, что бы уменьшить выражение

{{ myOption ? 'YES' : 'NO' }} 

Кроме того, если вы не хотите явно добавлять проверку в качестве наблюдателя в свой HTML, вы можете использовать функцию ссылки вашей директивы для этого. documentation объясняет это более подробно.

В вашей директиве, использовать его как в следующем фрагменте кода:

angular 
    .module('myModule') 
    .directive('myDirective', function() { 
     return { 
      restrict: 'A', 
      scope: { 
       myOption: '=?' 
      }, 
      link: function(scope, element) { 
       if (scope.myOption) { 
        // you have the attribute 
       } else { 
        // you don't 
       } 
      } 
     } 
    }); 
+0

'myOption: '=?'' Лучше –

+0

Хорошая идея; изм. Благодарю. –

1

В случае, если вы не имеете изолированную сферу (а также работает с изолированной сферы), вы можете проверить AttrS непосредственно:

angular 
.module('myModule') 
.directive('myDirective', function($parse) { 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      var option; 
      if (attrs.hasOwnProperty('myOption')) { 
       // if attr is plain string 
       option = attrs.myOption; 
       // or parse from a scope property 
       option = $parse(attrs.myOption)(scope); 
      } 
     } 
    } 
}); 
+0

Не могли бы вы объяснить последнюю строку 'option = $ parse (attrs.myOption) (scope);'. Пожалуйста, укажите технические термины, используемые для этого, а также для нас, чтобы google больше. – Saksham

+1

Служба синтаксического анализа (https://docs.angularjs.org/api/ng/service/$parse) используется для анализа угловых выражений. В этом случае это только имя свойства scope, которое задается атрибутом «my-option» директивы. $ parse возвращает функцию, а первый аргумент - это контекст, здесь наша область действия, на которую вычисляется выражение. Простыми словами: он получает значение свойства scope (variable), имя которого задается атрибутом my-options. Можно также написать: 'scope [attrs.myOption]' – chrise

+0

в порядке. несколько похож на '$ compile'. Прочитает различия – Saksham