Применить атрибут стиля CSS динамически в Angular JS

это должна быть простая проблема, но я не могу найти решение.

у меня есть следующие разметки:

<div style="width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;"></div>

мне нужно, чтобы цвет фона был привязан к области, поэтому я попробовал это:

<div style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:{{data.backgroundCol}};}"></div>

это не сработало, поэтому я провел некоторые исследования и нашел ng-style, но это не сработало, поэтому я попытался взять динамическую часть и просто жестко кодировать стиль в ng-style, как это...

<div ng-style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;}"></div>

и это даже не работает. Я непонимание как ng-style работает? Есть ли способ положить {{data.backgroundCol}} в простой атрибут стиля и заставить его вставить значение?

5 ответов



самый простой способ-вызвать функцию для стиля, и функция вернет правильный стиль.

<div style="{{functionThatReturnsStyle()}}"></div>

и в вашем контроллере:

$scope.functionThatReturnsStyle = function() {
  var style1 = "width: 300px";
  var style2 = "width: 200px";
  if(condition1)
     return style1;
  if(condition2)
     return style2;
}

непосредственно с ngStyle docs:

выражение, которое evals к объекту, ключи которого являются именами стилей CSS и значения соответствующие значения для этих ключей CSS.

<div ng-style="{'width': '20px', 'height': '20px', ...}"></div>

Так что вы могли бы сделать это:

<div ng-style="{'background-color': data.backgroundCol}"></div>

надеюсь, что это помогает!


В общем примечании Вы можете использовать комбинацию ng-if и NG-style, включающую условные изменения с изменением фонового изображения.

<span ng-if="selectedItem==item.id"
      ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_active.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>
 <span ng-if="selectedItem!=item.id"
       ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_deactivated.png)',
                'background-size':'52px 57px',
                'padding-top':'70px',
                'background-repeat':'no-repeat',
                'background-position': 'center'}">
 </span>

Я бы сказал, что вы должны поместить стили, которые не будут меняться в обычный style атрибут и условные стили/область в . Кроме того, ключи string не нужны. Для ключей CSS с дефисами используйте camelcase.

<div ng-style="{backgroundColor: data.backgroundCol}" style="width:20px; height:20px; margin-top:10px; border:solid 1px black;"></div>