Есть ли способ объявить временную переменную в шаблоне VueJS ?Моя проблема заключается в том, что в v-for я проверяю, существует ли фактическое значение в Array , и если нет, я печатаю другой текст, но для каждого элемента v-for он делает это дважды (сначала проверить, существует ли, а затем напечатать значение) где с переменной это можно сделать один раз.
Я использую VueJS2 без какого-либо препроцессора или шаблонизаторов.
Вот мой массив:
let formats = [
{id: 1, label: "A3"},
{id: 1, label: "A4"},
{id: 1, label: "A5"},
{id: 1, label: "A6"},
];
Вот мой шаблон:
<tr v-for="data in ajaxDatas">
<td>
<template
v-if="formats.find(e => {
return (e.shortEdge == data.height && e.longEdge == data.width) || (e.shortEdge == data.width && e.longEdge == data.height);
})"
>
{{ formats.find(e => {
return (e.shortEdge == data.height && e.longEdge == data.width) || (e.shortEdge == data.width && e.longEdge == data.height);
}).label }}
</template>
<template v-else>
Other format
</template>
</td>
</tr>
Как видите, не очень оптимизирован... Я думал как сделать временную переменную для хранения возвращаемого результата, что-то вроде этого:
<tr v-for="data in ajaxDatas">
<td>
{{
var f = formats.find(e => {
return (e.shortEdge == data.height && e.longEdge == data.width) || (e.shortEdge == data.width && e.longEdge == data.height);
});
f ? f.label : 'Other format'
}}
</td>
</tr>
ДЛЯ МОМЕНТА Я нашел способ, но он не работает должным образом, я могу сделать что-то вроде этого:
<tr v-for="data in ajaxDatas">
<td>
{{ f = formats.find(e => {
return (e.shortEdge == data.height && e.longEdge == data.width) || (e.shortEdge == data.width && e.longEdge == data.height);
}) }}
{{ f ? f.label : 'Other format' }}
</td>
</tr>
Но на самом деле это выводит меня результат f в HTML ... Так что я помещаю его в невысказанный HTML-тег, но это заставляет меня думать, что есть что-то лучшеделай здесь ...