【问题标题】:Vue autocomplete in laravellaravel 中的 Vue 自动完成
【发布时间】:2019-04-08 16:28:23
【问题描述】:

我正在处理 laravel 站点中的 vue 自动完成功能问题。

我已经设置了路线、控制器和刀片。目前,如果我检查 vue 组件并输入输入,它会显示我在控制台中输入的关键字,所以我知道它正在捕捉我输入的内容。

至于我控制器中的 $groupResult,如果我只是将它转储到我的页面上,那么它会按预期转储大约 100 个结果。我想要做的就是在这 100 个结果中搜索的输入自动完成。

我到底错过了什么?

路线

Route::get('campaigns/categories','CampaignsController@searchcategories')->name('campaigns.categories');

控制器:

public function searchcategories(Request $request)
{
    $userNum = $this->user;
    $category = new categoryService();
    $safecategories = $category->info($userNum);

    $groupResult = array();

    foreach($safecategories->categories as $categories){
        $groupItem = array();
        $groupItem["group_code"] = $categories->group_code;
        $groupItem["group_name"] = $categories->group_name;

        array_push($groupResult, $groupItem);
    }

     return view('campaigns')
        ->with('groupResult', $groupResult);

}

刀片

<div id="categoryNames">
<input type="text" v-model="keywords">
<ul v-if="results.length > 0">
  <li v-for="result in results" :key="result.id" v-text="result.name"></li>
</ul>
</div>

var categoryNames = new Vue({
  data() {
    return {
      keywords: null,
      results: []
    };
  },

  watch: {
    keywords(after, before) {
      this.fetch();
    }
  },

  methods: {
    fetch() {
      axios.get('campaigns/categories', { params: { keywords: this.keywords } })
        .then(response => this.results = response.data)
        .catch(error => {});
    }
  }
}).$mount('#categoryNames');

【问题讨论】:

    标签: javascript laravel vue.js autocomplete


    【解决方案1】:

    如果您只是尝试过滤现有结果,则无需调用服务器来执行此操作。

    <div id="categoryNames">
    <input type="text" v-model="keywords">
    <ul v-if="filteredResults.length > 0">
      <li v-for="result in filteredResults" :key="result.id" v-text="result.name"></li>
    </ul>
    </div>
    
    var categoryNames = new Vue({
      data() {
        return {
          keywords: null,
          results: []
        };
      },
    
      computed: {
        filteredResults () {
          return this.keywords ? this.results.filter(row => row.name.search(new RegExp(`${this.keywords}`, 'i')) !== -1) : this.results
        }
      }
    }).$mount('#categoryNames');
    

    计算属性返回一个对象数组(我假设您正在过滤对象键名)。如果存在关键字,它将使用正则表达式执行不区分大小写的搜索。如果关键字不存在,则返回完整的结果对象。

    请注意,我没有直接测试此代码,因此可能存在拼写错误等。但已经在大型应用程序中实现了许多版本。

    【讨论】:

    • 那么究竟是在哪里获得了 groupResult 的功能呢?
    • 我想我必须返回带有该函数结果的视图,但是我如何实际过滤该数据?
    • 由于这个页面是在服务器端呈现的,我会将 groupResult 传递给视图并将其绑定到 results: [] 结果:{!! json_encode($groupResult) !!}。我给你的是过滤功能
    • 示例代码中缺少的一项是调用 Laravel 视图的时间/位置。这将有助于完善这个答案。
    • 对不起,我应该补充一下。它只是索引函数中的返回视图
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 2017-03-28
    • 2017-05-15
    • 2020-03-29
    • 1970-01-01
    • 2018-12-30
    • 2016-05-16
    • 2021-05-10
    相关资源
    最近更新 更多