Получение общей длины нескольких выходных данных Vue.js. - PullRequest
0 голосов
/ 24 августа 2018

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?

1 Ответ

0 голосов
/ 24 августа 2018

Один из способов - передать весь объект фильтру.

В шаблоне:

{{ someData.current | truncate }}

Тогда в вашем filters:

truncate (current) {
    var name1 = current.name1,
        name2 = current.name2,
        name3 = current.name3,
        totalLength = name1.length + name2.length + name3.length;

    if (totalLength > 30) {
        // Inset appropriate truncation here
        name1 = name1.slice(0, 4);
        name2 = name2.slice(0, 4);
    }

    return name1 + ' ' + name2 + ' ' + name3;
}

Как написано здесь, он просто усекает name1 и name2 до 4 символов. Вы не предоставили никаких подробностей правил усечения, которые вы хотите применить, поэтому я не пытался сделать что-то более сложное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...