Мне нужно установить свойство CSS с помощью угловой функции. Вот мой код:
<div ng-style="{ 'transform': getRotation(i) }"></div>
Однако я хотел бы добавить совместимость браузера, используя следующие свойства:
Я попробовал что-то вроде:
ng-style="{ 'transform': getRotation(i),
'-webkit-transform': getRotation(i),
'-moz-transform': getRotation(i),
'-ms-transform': getRotation(i),
'-o-transform': getRotation(i) }"
Но getRotation()
вызывается пять раз, даже если требуется только одно свойство.
Знаете ли вы, что правильно и эффективно управлять совместимостью CSS с угловым?
EDIT: рабочий плункер здесь, если необходимо
используйте ng-class вместо функции преобразования ng-стиля в css.
Вам нужно будет написать директиву, чтобы уменьшить количество раз, когда вызывается функция getRotation().
Директива должна генерировать атрибут стиля, наблюдая getRotation и обновляя атрибут стиля только один раз, а не 5 раз.
Пожалуйста, поделитесь своим кодом в плункере или что-то в этом роде, поэтому я могу обновить его с помощью директивы.
Изменение: ниже плункер содержит директиву, указанную выше.
https://plnkr.co/edit/iodBM1zbmrRGuNT8J0R9?p=preview
.directive('prefixTransform', function($log) {
return {
restrict: 'A',
scope: {
prefixTransform: '='
},
link: function(scope, element) {
scope.$watch('prefixTransform', function(o, n) {
element
.css('transform', n)
.css('-webkit-transform', n)
.css('-moz-transform', n)
.css('-ms-transform', n)
.css('-o-transform', n);
});
}
};
})
Если вы используете инструмент предварительной компиляции, например gulp или grunt, вы можете создать класс с свойством transform и использовать автопрефикс, который будет генерировать все префиксные свойства. Затем вам просто нужно использовать ng-class вместо ng-style.