Я пытаюсь динамически назначать цвет некоторому тексту в угловом, в ngRepeat
массиве строк.Динамический цвет элементов с угловым в ngRepeat
У меня возникли проблемы с выяснением «Углового пути» этого. Я всегда мог настроить фильтр, который выдает соответствующую цветовую схему HSL в стиле элемента, но это было бы очень неэффективно, так как ему пришлось бы пересчитать цвет каждого цикла дайджеста. Размер массива ngRepeat
может составлять несколько тысяч.
Если это уместно, вот текст -> код преобразования HSL:
function calculateColor(value){
var saturation = [0.35, 0.5, 0.65];
var lightness = [0.25, 0.35, 0.45];
var hash = stringToHash(value);
var hsl = calculateHsl(hash, lightness, saturation);
return hsl;
}
function stringToHash(value){
var seed = 131;
var seed2 = 137;
var hash = 0;
value += 'x';
var MAX_SAFE_INT = 9007199254740991/seed2;
var charArray = value.split('');
for(var i = 0; i < charArray.length; i++){
if(hash >= MAX_SAFE_INT){
hash == hash/seed2;
}
hash = hash * seed + charArray[i].charCodeAt(0);
}
return Math.abs(hash);
}
function calculateHsl(hash, lightness, saturation){
var H,S,L;
H = hash % 359;
hash = hash/360;
S = saturation[hash % saturation.length];
hash = hash/saturation.length;
L = lightness[hash % lightness.length];
return [H,S,L];
}
Фильтр:
chatApp.filter('toHsl', function(){
return function(input){
var hsl = calculateHslColor(input);
var hslString = 'hsl('+hsl[0]+', '+hsl[1]*100+'%, '+hsl[2]*100+'%)'
return hslString;
}
});
Сообщите нам больше? Будет ли время связывать решение проблемы производительности, или вы ожидаете обновить массив повторений после загрузки страницы? – Dan
Нужно ли обновлять их каждый раз, когда вы загружаете новый список, на котором выполняется повтор? каковы ваши ограничения и тому подобное? – ajmajmajma
@ Dan Спасибо за ответ. Одно время привязки действительно работает, текст не изменится после того, как он находится в массиве. Ajmaj Он должен быть установлен только один раз для элемента –