2017-02-22 8 views
0

Я пытался написать пользовательские директивы Угловое JS, который задает класс элемента в зависимости от входящих использовать параметры:Почему директива не задает класс?

angular.module('hello', []) 
    .directive("testCase", function(){ 

    return { 
     restrict: 'A', 
     scope: { 
      'condition': '=' 
     }, 
     link: function (scope, element, attrs) { 
      switch (scope.condition) { 
       case "pending": 
       element.css('color', 'yellow'); 
       break; 
       case 'active': 
       element.css('color', 'green'); 
       break; 
       case "archived": 
       case "finished": 
       case "completed": 
       element.css('color', 'gray'); 
       break; 
       } 

     } 
     } 
}); 

http://jsfiddle.net/9h29R/71/

Но каталог не установлен класс, когда я прохожу из параметров «активный»

+2

не является его директивой – Sajeetharan

ответ

1

Вам просто не хватает котировок. Вам нужно передать строку, иначе угловой будет компилировать active в качестве переменной родительской области. Проверьте рабочую скрипку: http://jsfiddle.net/9h29R/73/

<div ng-app="hello"> 
    <div test-case condition="'active'">Active</div>  
</div> 
1

@Slava. K ошибся. Просто для удовольствия, вот еще один способ настройки стилей, а также любой другой атрибут элемента с помощью attrs.$set:

JS

angular.module('hello', []) 
    .directive("testCase", function() { 

    return { 
     restrict: 'A', 
     scope: { 
     'condition': '=' 
     }, 
     link: function(scope, element, attrs) { 

     var setStyle = function() { 

      switch (attrs.condition) { 

      case "pending": 
       return "color: yellow" 
      case "active": 
       return "color: green" 
      case "archived": 
      case "finished": 
      case "completed": 
       return "color: gray" 
      } 
     }; 

     attrs.$set('style', setStyle()); 
     } 

    } 
    }); 

Разметка

<div ng-app="hello"> 
    <div test-case condition="active">Active</div> 
    <div test-case condition="pending">Pending</div> 
    <div test-case condition="archived">Archived</div> 
    <div test-case condition="finished">Finished</div> 
</div> 

Скрипач

http://jsfiddle.net/zh9u45nn/2/