Я собираю данные из API, который очень прост в использовании, значения процентного изменения могут быть как положительными, так и отрицательными. Я пытаюсь добавить класс к элементу, чтобы при отрицательном значении я мог отобразить класс и наоборот.
Вот то, что я попробовал до сих пор без удачи:
<li v-for="info in infos.slice(0, 5)"> -- Grabs first 5 items in API
<div :class="{ positive: info.percent_change > 0 }" v-html="info.percent_change"></div>
</li>
Код правильно отображает значение процента_безопасности, но не применяет к нему никакого класса, независимо от того, является он отрицательным или положительным.
Пример вывода без имен классов:
<li><div class="">0.8%</div></li>
<li><div class="">-6.57%</div></li>
Вы должны очистить знак %
используя replace('%','')
следующим образом:
<div :class="{ positive: getNumValue(info.percent_change) > 0 }" v-html="info.percent_change"></div> </li>
и метод выглядит так:
methods:{
getNumValue(percent){
return percent!=undefined?percent.replace('%',''):0;
}
...
}
Лучше сначала проанализировать значение, потому что оно сравнивает строку с 0 (ноль).
Что-то вроде { positive: parseFloat(info.percent_change) > 0 }
Вы можете проанализировать строковое значение и преобразовать его в значение с плавающей запятой, которое можно сравнить с 0.
<div :class="{ positive: isPositive(info.percent_change) }"
v-html="info.percent_change"></div> </li>
public isPositive(v:string){
return parseFloat(v) > 0; //parseFloat will ignore the %
}
name.percent_change
а неinfo.percent_change
?info.percent_change