2014-02-10 2 views
0

Я хочу использовать присутствие (или отсутствие) атрибута в качестве логического значения в моей директиве. Например:Директива Scope Boolean Attribute

<foo bar baz></foo> 

Где в моем контроллере у меня есть следующий:

controller: function($scope, $element) { 
    if $scope.bar === null { 
     alert("Bar Present"); 
    } 
    if $scope.baz === null { 
     alert("Baz Present"); 
    } 
} 

К сожалению, в выше бар и Баз не установлены на все на $ объеме. Я ожидаю увидеть нулевой или явный «неопределенный». Но область $ просто не имеет свойств bar или baz.

+0

Примечание: Я не волнует, что я должен делать в контроллере или моей функции связи; но я * делаю * забочусь о синтаксисе директивы. Это должно быть так же просто, как включать или не включать атрибут, а не устанавливать его равным пустой строке или «true». Я также не большой поклонник прямого доступа к attrs в элементе $ (хотя в настоящее время я решаю проблему таким образом). – Crisfole

ответ

1

Here is a working code sample for what I think you want

var app = angular.module('app', []); 

app.directive('myDirective', [function(){ 

return { 
    restrict: 'E', 
    template: '<div>directive test</div>', 
    link: function(scope, el, attrs){ 
    if(attrs.bar !== undefined) { el[0].innerText = 'bar'; } 
    if(attrs.baz !== undefined) { el[0].innerText = el[0].innerText + ' baz'; } 
    } 
}; 

}]); 

    <body> 
    <my-directive bar baz></my-directive> 
+0

Спасибо. Я надеялся на результат, используя только контроллер, но имеет смысл, что он должен быть ранее в процессе компоновки. – Crisfole

+0

Да, все, что касается html (dom), я использую функцию ссылки, мне было очень тяжело сначала отпустить «jquery» способ делать что-то, но угловое стоит усилий –

+0

Ну, я hadn ' t действительно ожидал, что он будет работать как jquery ... просто не заглядывал, где я имел доступ к attrs в директиве. – Crisfole

Смежные вопросы