Vuetify v-data-table search.filter не показывает никаких результатов - PullRequest
0 голосов
/ 08 января 2020

Получение данных из нашего API, но встроенный поиск / фильтр Vuetify не работает. Я думаю, что это связано с тем, что возвращаемые данные вложены в объект. При вводе в поисковом фильтре после первого символа появляется «Не найдено подходящих записей», при удалении поискового запроса отображается полная таблица данных. Заранее благодарю за любую помощь.

<template>
  <v-container
    fill-height
    fluid
    grid-list-xl
  >
    <v-layout
      justify-center
      wrap
    >
      <v-flex
        md6
      >
        <material-card
          color="black"
          title="Users"
        >

      <v-text-field
        v-model="search"
        append-icon="mdi-magnify"
        label="Search"
        single-line
        hide-details

      ></v-text-field>


          <v-data-table
            :headers="headers"
            :items="userData"
            :search="search"
            hide-actions



          >
            <template
              slot="headerCell"
              slot-scope="{ header }"
            >
              <span
                class="subheading font-weight-light text-dark text--darken-3"
                v-text="header.text"
              />
            </template>
            <template
              slot="items"
              slot-scope="{ item }"
            >

              <td>

                <v-avatar slot="offset" class="mx-auto d-block" size="100">
                  <img v-if="item.ProfileImage==null" src="img/conectrlogo.jpg">
                  <img v-else v-bind:src= "item.ProfileImage">

                </v-avatar></td>
                <td><v-btn text-small outlined color="primary" @click= "goToUserProfile(item.Id)">{{ item.Id}}</v-btn></td>

              <td>{{ item.Username}}</td>
              <td>{{ item.Name}}</td>



            </template>
          </v-data-table>
        </material-card>
      </v-flex>

    </v-layout>
  </v-container>

</template>

Скрипт

<script>


import axios from 'axios'

  export default {

     mounted()
    {
      console.log("got into mounted function");
      this.getResults();

    },

    data () {
      return {
         customFilter: function (items, search, filter, headers) {
        search = search.toString().toLowerCase()
        if (search.trim() === '') return items

        const props = headers.map(h => h.value)

        return items.filter(item => props.some(prop => filter(getObjectValueByPath(item, prop, item[prop]), search)))
      },


          userData:[],
          totalUsers:0,
          showResults:true,
          search:'',
           headers:[

            {
            text: 'User', 
            value: 'profileimage', 
            align: 'center',
            width: '50px',
            sortable:false
            },

             {
            text: 'id', 
            value: 'id', 
            align: 'center',
            width: '100px',
            sortable:false
            },


             {
            text: 'Username', value: 'username', 
            align: 'left',
            sortable: false,
            width: '50px'
            },

             {
            text: 'Name', value: 'name', 
            align: 'left',
            sortable: true,
            width: '50px'
            }


            ]
      }
    },

      computed:{

    },






    methods: {




       goToUserProfile: function(Id)
       {
          console.log("avatar clicked:"+Id);
          this.$router.push('/user-profile/'+Id)

        },

        getResults (){

        console.log("got into the all users endpoint");
        console.log(this.$baseUrl+'/admin/users');


        // axios.get(this.$baseUrl+'/admin/users',
        // {withCredentials: true}).then ( response => {
        // this.userData=response.data.Users; 
        // this.totalUsers = response.data.UserCount;
        // console.log("all user response:"+this.userData);

        //  });

        //this.showResults=true;


        axios.defaults.withCredentials = true;
        axios(this.$baseUrl+'/admin/users', {
          method: 'GET',
          withCredentials: true,
          crossDomain:true
        }).then(res => {
            console.log(res);
            this.userData=res.data.Users; 
            this.totalUsers = res.data.UserCount;
            console.log("all user response:"+this.userData);
          }).catch(err => {
            console.log("got an error");
            console.log(err);
          })






        },



    initialize()
    {


    },



    }
  }
</script>
...