3

我正在研究客户服务 ABM。对于用户搜索,我使用 Vue Select 过滤并选择正确的客户... Vue Select 从我的客户 api 获取客户列表,然后我将数据提取到 vue select 中。用户可以过滤以获得正确的客户...

在此处输入图像描述

在此处输入图像描述

我需要知道的是当我想“编辑”服务时如何分配选定的客户端。当用户按下“服务编辑”时,模式在编辑模式下打开,它对“/service/{id}”进行 api 调用以获取服务信息。带有所有服务信息和客户 ID 的服务响应......问题是,如果我把它设置为默认选择......

在此处输入图像描述

这是我的 vuejs 信息:

在此处输入图像描述

我的 searchCustomers 函数,将数据提取到“选项”中:

searchCustomers(search){

            let searchVal = search.split(' ').join('+');

            axios.get('api/customer?nomina=&filter=' + searchVal)
            .then((response) => {
              this.options = response.data['data'];
            })
            .catch(function (error) {
              console.log(error);
            })
          },

新的服务模式,从 api 获取数据:

newEditServiceModal(id){

            this.editMode = true;

            this.$Progress.start();

            this.service.clear();
            this.service.reset();

            axios.get('api/service/' + id)
            .then((data) => {
              this.service.fill(data.data)
            })
            .catch(() => {
              this.$Progress.fail();
            })

            $('#serviceModal').modal('show');

          },

最后是我的 v-select 组件:

<v-select 
  :options="options" 
  @search="searchCustomers" 
  :filterable="false" 
  v-model="service.id_customers" 
  :class="{ 'is-invalid': service.errors.has('customer.id') }"
>
  <template 
    slot="no-options"
  >
    Buscar un cliente...
  </template>

  <template 
    slot="option" 
    slot-scope="option"
  >
    <div class="d-center">
    {{ option.id + ' - ' + option.name }}
    </div>
  </template>

  <template 
    slot="selected-option" 
    slot-scope="option" 
    :value="option.id" 
    v-model="service.id_customers"
  >
    <div class="selected d-center">
      {{ option.id + ' - ' + option.name }}
    </div>
  </template>
</v-select>

传递 id 并将正确的客户分配给 v-form 的正确方法是什么?

4

1 回答 1

3

像这样的东西应该可以解决问题。这显示了如何将选定的值分配到表单字段中。对于输入,诀窍是使用v-model它们。示例如下。


编辑:更新我的答案以便使用slots..


这是否有助于回答您的问题,还是我误解了它?

如果我是你,我会复习他们的文档——这非常有帮助!


[ CodePen 镜像]


Vue.component('v-select', VueSelect.VueSelect)

new Vue({
  el: "#app",
  data: {
    selected: "",
    options: [{
      id: 1,
      name: "Guido Caffa"
    }, {
      id: 2,
      name: "John Doe"
    }]
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="https://unpkg.com/vue-select@latest"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-select@latest/dist/vue-select.css">

<div id="app">
  <div>
    <v-select v-model="selected" :options="options">
      <template v-slot:option="option">
        {{ option.id }} - {{ option.name }}  
      </template>
      <template v-slot:selected-option="option">
        {{ option.id }} - {{ option.name }}
      </template>
    </v-select>
    <div v-if="selected !== ''" style="margin-top: 20px;">
      <hr/> Selected Item:
      <pre>{{ selected }}</pre>
      <hr/>
    </div>
    <div v-if="selected !== ''" style="margin-top:20px;">
      Name:
      <div>
        <input type="text" v-model="selected.name" />
      </div>
      ID:
      <div>
        <input type="text" v-model="selected.id" />
      </div>
      <hr/>
    </div>
  </div>
</div>

于 2019-04-19T15:27:57.707 回答