【问题标题】:Vuejs v-model bind on blur to axios paramVuejs v-model 在模糊上绑定到 axios 参数
【发布时间】:2017-10-23 05:40:20
【问题描述】:

我正在尝试将输入传递给 axios 参数。 console.log(country_id) 在模糊时正确返回 country_id, axios country_id 参数未填充, 我错过了什么

<div id="app">

        <input v-model="country_id" v-on:blur="addCountryId" />
        <ul>

            <li v-for="uploaded_segment in uploaded_segments"> @{{ uploaded_segment.name }}</li>
        </ul>
</div>

<script>
    new Vue({

    el: '#app',

    data: {

        uploaded_segments: [],
        country_id :''
    },
    methods: {

        addCountryId(){

     country_id= this.country_id;
     console.log(country_id);

}
},
    mounted() {

 axios.get('/get_segments', {
        params: {
            country_id: this.country_id
        }
    }) .then(response => this.uploaded_segments = response.data);

}
});

【问题讨论】:

  • 您正在尝试将输入传递给 mountd() 挂钩中的 axios 参数,该挂钩仅在实例刚刚挂载后调用一次。 country_id 的初始值为' '。 Mounted hook 不会查找更改,因此它不知道用户在输入字段中输入了 country-id 以再次触发 axios。最好在你声明的 on:blur 方法中编写 axios 请求

标签: laravel vue.js vue-component


【解决方案1】:

正如 user7814783 在对您的 OP 的评论中解释的那样,挂载的钩子在渲染后仅运行一次 - 此时,country_id 仍然为空 (``)。

您可能更想使用监视功能:

watch: {
  country_id(newlValue) {
    axios.get('/get_segments', {
        params: {
            country_id: this.country_id
        }
    }) .then(response => this.uploaded_segments = response.data);
  }
}

由于这会在用户每次更改甚至 1 个字符时触发请求,因此请考虑使用惰性标志 (v-model.lazy="country_id") 或解除监视函数 (https://vuejs.org/v2/guide/migration.html#debounce-search-demo)

编辑:从评论中回答后续问题:

如何处理在 watch 功能上发生变化的多个参数,想法是有多个选择来过滤段:paste.laravel.io/8NZeq

将功能移动到一个方法中,为您要观看的每条数据添加一个 wathcer,从每个数据中调用该方法

watch: {
  country_id: 'updateSegments',
  // short for: country_id: function() {  this.updateSegments() }
  brand_id: 'updateSegments',
},
methods: {
  updateSegments() {
        axios.get('/get_segments', {
            params: {
                country_id: this.country_id,
                brand_id: this.brand_id
            }
        }) .then(response => this.uploaded_segments = response.data);
      }
}

【讨论】:

  • 这真的很有帮助,我如何处理在手表功能上发生变化的多个参数,这个想法是有多个选择来过滤段:paste.laravel.io/8NZeq
  • 查看我的更新答案。如果它解决了您的原始问题,请接受它,谢谢:)