2015-04-25 3 views
3

У меня есть эта директива:переплета значения стиля внутри шаблона директивы

app.directive('MessageChild', function($timeout) { 
    return { 
     restrict: 'E', 
     scope: { 
      pos: '=?', 
      msg: '=' 
     }, 
     link: function(scope, element, attr) { 
      scope.msg = attr.msg; 
      scope.styleVar = "100" //I want to insert this variable 
     }, 
     template: '<style> div {position: absolute; top: **<scope variable or binding here>** }</style>' + 
'<div>{{msg}}</div>' 

}) 

Это просто пример, чтобы показать, что я пытаюсь сделать. Мои стили на самом деле существенно сложнее и связаны с анимацией. Мне нужно выполнить некоторые операции, а затем передать значение моим стилям. Как я могу вставить переменную в этом месте из моей директивы? Угловой не нравится, что я устанавливаю привязки внутри стилей.

+0

Может быть, немного подробнее, пожалуйста, может быть, я медленный. Синтаксис вашего шаблона также неверен. – dcodesmith

+1

Можете ли вы добавить plunkr/скрипку с тем, что вы пробовали –

+0

У меня есть стили анимации, которые мне нужно настроить «на лету», поэтому мне нужно, чтобы значения анимации были переменными, поэтому я могу рассчитать и ввести их в шаблон. Где проблема синтаксиса? – tpie

ответ

0

Вы можете попробовать построить объект в пределах функции link, которая затем может быть передана в директиву ngStyle.

app.directive('messageChild', function($timeout) { 
    return { 
     restrict: 'E', 
     scope: { 
      pos: '=?', 
      msg: '=' 
     }, 
     link: function(scope, element, attr) { 
      scope.msg = attr.msg; 
      scope.styleVar = { 
       'color': 'blue', 
       'position': 'absolute', 
       'top': '100' 
      }; 
     }, 
     template: '<div ng-style="styleVar">{{msg}}</div>' 
    }; 

}); 

Пример Plunker:

http://plnkr.co/edit/b1uO8N

EDIT

Вы можете сделать то же самое, используя <style> тег, если вы хотите:

app.directive('messageChild', function($timeout) { 
    return { 
     restrict: 'E', 
     scope: { 
      pos: '=?', 
      msg: '=' 
     }, 
     link: function(scope, element, attr) { 
      scope.msg = attr.msg; 
      scope.styleVar = 'blue'; 
     }, 
     template: '<style> div {position: absolute; top: 100; color: {{styleVar}}}</style><div>{{msg}}</div>' 
    }; 

}); 

Пример Plunker:

http://plnkr.co/edit/8NxKFS?p=preview

+0

Да, я знаю стиль ng, но он ничего не делает для более сложного стиля, такого как анимация, где у вас есть для выполнения нескольких селекторов классов. В стиле ng применяется стиль непосредственно к элементу. – tpie

+0

Я действительно использую его для некоторых вещей, и мне не нравится способ применения стилей. Анимации не отвечают на его стили так же, как стили непосредственно в шаблоне. – tpie

+0

Хорошо. Я обновил свой ответ, чтобы вместо этого использовать тег