Angular выражение внутри атрибута стиля не работает в IE
У меня есть angular 1.0.6 (я знаю его старый), и у меня есть атрибут стиля с выражениями:
<li style="background-color: {{item.color}}">
<span style="color: {{item.color | contrastColor}}">{{item.label}}</span>
</li>
Он работает нормально, но не для IE (приложение должно работать для > IE10). Когда я открываю инструмент разработчика, атрибут стиля отсутствует. Я пытаюсь создать настраиваемую директиву стиля (потому что я решил, что IE удаляет недопустимый атрибут до того, как angular может его прочитать), но с помощью этого простого кода у меня есть ошибка TypeError: Cannot read property 'replace' of undefined
из jquery (проверена на google chrome), потому что в моем случае item.color может быть null
.directive("logStyle", function() {
// logStyle directive
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.css(scope.$eval(attrs.logStyle));
}
};
});
Как я могу заставить его работать. Я знаю, что существует ngStyle, но это не совсем то, что мне нужно.
Ответы
Ответ 1
Хорошо, попробуйте, но я не уверен, полностью ли понимаю, что вы пытаетесь сделать
<div ng-controller="appCtrl">
<ul>
<li ng-repeat="item in items" ng-style="{'background-color': item.color}">
<span ng-style="{ 'color': (item.color | contrastColor) }">{{ item.label }}</span>
</li>
</ul>
</div>
Отредактировал html, не смог проверить это в IE прошлой ночью, поэтому пришлось подождать до сегодняшнего дня. IE, похоже, не любит атрибут стиля с {{}} связыванием внутри, поэтому он удаляет его из DOM. Я нашел эту проблему https://github.com/angular/angular.js/issues/2186 и есть plunkr с указанным исправлением.
Ответ 2
Для меня изменение style
на ng-attr-style
решило проблему. Протестировано в IE и Chrome. Надеюсь, это помогает кому-то другому.
Вы можете использовать {{ }}
следующим образом:
ng-attr-style="color:{{entity.status | statusColor}};"
Ответ 3
IE-браузер не способен анализировать выражение angular с атрибутом style
, поэтому для решения этой проблемы следует использовать ng-style
вместо style
.
Ответ 4
изменение стиля в ng-attr-стиле устраняет проблему и прекрасно работает во всех браузерах