Поле поиска и флажок фильтра с Vue - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь построить систему фильтров с помощью Vue.

Обновлено

Фильтры работают, но все вычисленные функции являются отдельными функциями.Так как я могу сделать это в одной функции и использовать ее.

export default {

    data() {
        return {
            estates: [],
            search: '',
            regions:['関西','関東','京橋'],
            checkedRegions:[]
        }
    },
    created(){
        axios.get('/ajax').then((response) => {
            this.estates = response.data;
        });
    },
    computed: {
        one: function() {
            var result =  this.estates.filter((estate) =>
                estate.building_name.match(this.search)
            );
            if(this.checkedRegions.length && this.checkedRooms.length) {
                return result.filter(estate => this.checkedRegions.includes(estate.region) && this.checkedRooms.includes(estate.rooms))
            }
            return result;
        }
    }
}
<div class="container-fluid">
        <div class="row">
            <div class="col-md-9">
                <input type="text" v-model="search" name="" placeholder="search estate" value="">
                <div v-for="estate in filteredestate" class="card-body">
                    <h2>{{estate.building_name}}</h2>
                    <p>{{estate.address}}</p>
                </div>
            </div>
        </div>
    </div>

filteredestate filteredRegions и filteredRooms выполняют одну функцию.например, как вернуть эти функции с &&?И используйте это в этом div.

<div v-for="estate in oneFunction" class="card-body">

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Сначала установите результат поиска фильтра как переменную, и вы можете проверить фильтр по выражению or(||)!

Я изменил this внутри функции стрелки, установив эту переменную и в последней строке вернув result по умолчанию

one: function() {
  var that = this;
  var result =  this.estates.filter((estate) =>
    estate.building_name == that.search;
  );
  if(this.checkedRegions.length || this.checkedRooms.length) {
    return result.filter(estate => that.checkedRegions.includes(estate.region) || that.checkedRooms.includes(estate.rooms))
    }
  // when region and room length is 0
  return result;
  }
}
0 голосов
/ 29 января 2019

rooms и regions - массивы.Поэтому вам необходимо выполнить итерацию по этим массивам, чтобы отобразить флажки.

вместо этого:

<input type="checkbox" v-model="checkedLocations"  v-bind:value="regions">関東 <input/>
<input type="checkbox" v-model="checkedLocations"  v-bind:value="regions">関西 <input/>
<input type="checkbox" v-model="checkedLocations"  v-bind:value="regions">北海道<input/>

должно выглядеть следующим образом:

<template v-for="region in regions">
  <input type="checkbox" v-model="checkedLocations"  v-bind:value="region.id">region.region<input/>
</template>        

аналогичнобыть сделано с rooms.

Кроме того, в части js у вас есть checkedRegions, а в шаблоне у вас есть checkedLocations.Я думаю, это должно быть слишком checkedRegions.

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