TLDR;
У меня есть раскрывающийся компонент Vue, который заполняет список выбираемых элементов.
<dropdown-component inline-template>
<div>
<!--Drop Label--><span v-on:click='showDropDown=!showDropDown' :class="{'active-menu': showDropDown, '': !showDropDown">{{someData.current.name1}} ({{someData.current.name2}}) {{someData.current.name3}}</span>
<!-- Drop Menu List --><div v-if='showDropDown' v-cloak v-model="showDropDown">
<div>
<input type="text" v-model="search" name="search" placeholder="Search" autocomplete="off">
</div>
<!-- Data populated list --><div v-for='data in searchFilter'>
<span v-on:click='dataClicked(data)'>{{data.name1}} {{data.name2}} {{data.name3}}</span>
</div>
</div>
</div>
</dropdown-component>
Когда элемент выбран, метка раскрывающегося спискаобновлены до выбранных значений.
например, у меня возвращены некоторые данные для поиска:
data: function(){
return {
someData: someDataReturned.things, //only filtering array of things
search: ''
}
}
структура моего набора данных:
{
things: [{name1: value1, name2: value2},{name1: value1, name2: value2}],
current: {name1: value1, name2: value2, name3: value3}
}
Тогдас этим набором данных у меня есть вычисляемый фильтр для поиска, чтобы он работал
computed: {
searchFilter: function() {
var _this = this;
return this.someData.filter(function(obj){
return obj.name1.toString().indexOf(_this.search.toLowerCase()) >= 0;
});
}
Значения могут быть разной длины, и я пытаюсь получить общее количество всех символов и усечь {{name1}} {{name2}} {{name3}}
соответственно.
при выборе элемента я устанавливаю значения current
для обновления метки.
dataClicked: function(item) {
someData.current.name1 = item.name1;
someData.current.name2 = item.name2;
someData.current.name3 = item.name3;
}
ЗДЕСЬ: ---
IЯ хочу получить общую длину метки и усечь с помощью filters
Что-то вроде:
filters: {
truncate: function(val){ return val.substring(0,30) }
}
И все же я хочу только усечь name1
и name2
в зависимости отобщая длина текста в сочетании.длина name1 + name2 + name3, затем обрежьте name1 и name2 соответственно.
Есть ли способ сделать это в Vue с помощью filters
?