Динамический CSS углового класса

0

Существует следующий код:

HTML:

<tr ng-repeat="o in orders" ng-class="getOrderClass(o)">

CoffeeScript:

  $scope.getOrderClass = (o) ->
    switch o.orderStatus.title
      when 'New' then 'new-order'
      when 'Completed' then 'completed-order'

Этот код выглядит неплохо, но есть одна проблема: после загрузки страницы я вижу класс "нового порядка" или "завершенный порядок" в атрибуте "ng-class", а не в "классе". Где ошибка? заранее спасибо

Теги:
coffeescript

4 ответа

0

Вы можете написать такую директиву

app.directive('myClass', [function(){
  return {
    scope: {
      class: '=myClass'
    },
    restrict: 'A',
    link: function(scope, elem, attrs, controller) {
      elem.addClass(scope.class);
    }
  };
}]);

Ввиду:

<div my-class="getOrderClass(o)">I have the getOrderClass(o) class</div>

Я бы предложил вам каким-то образом кэшировать результат getOrderClass (o), потому что когда вы связываете вызов функции, он будет вызван в каждый круг дайджест. Это может привести к проблемам с производительностью в долгосрочной перспективе и обычно не является хорошей практикой, особенно если функция находится в ng-repeat.

Это может быть что-то вроде <div ng-repeat="o in orders" my-class="orderClasses[o.id]">I have the getOrderClass(o) class</div>

Изменение: обратите внимание, что эта директива только добавляет класс один раз, когда директива инициализируется, поэтому она не будет работать как обычная двусторонняя привязка. Если вам это нужно, вам также нужно добавить наблюдателя для scope.class и снова вызвать elem.addClass

0

Попробуй это:

$scope.getOrderClass = (o) ->
  title = o.orderStatus.title
  {
    'new-order': title == 'New'
    'completed-order': title == 'Completed'
  }
0

вы можете использовать эту структуру

ng-class="{'new-order' : o.orderStatus.title == 'New', 'completed-order' : o.orderStatus.title == 'Completed'}"
  • 0
    Это очень уродливый код. Я могу добавить больше состояний в будущем :) Извините, братан, спасибо за попытку
  • 0
    нет проблем, все, что делает тебя счастливым!
0

Вы использовали ng-класс в качестве атрибута в этом случае. Если вы проверяете или просматриваете исходный код, он будет указан как значение атрибута ng-class. Если вам нужно вычисленное значение класса в атрибуте "class", используйте этот синтаксис

Если этот синтаксис используется, то атрибут класса будет иметь имя класса вместе с выражением, используемым для вычисления этого класса

Ещё вопросы

Сообщество Overcoder
Наверх
Меню