Vue Выберите выбранную опцию

#vue.js #vuejs2 #vue-component #vue-select

#vue.js #vuejs2 #vue-компонент #vue-выберите

Вопрос:

Я работаю над ABM обслуживания клиентов. Для поиска пользователей я использую Vue Select для фильтрации и выбора правильного клиента… Vue выберите получить список клиентов из моего API клиентов, затем я извлекаю данные в vue select. Пользователь может фильтровать, чтобы получить правильного клиента…

введите описание изображения здесь

введите описание изображения здесь

Что мне нужно знать, так это как назначить выбранного клиента, когда я хочу «отредактировать» службу. Когда пользователь нажимает «Редактировать сервис», модальный режим открывается в режиме редактирования, он вызывает API-интерфейс «/ service / {id}», чтобы получить служебную информацию. Ответ службы со всей служебной информацией и идентификатором клиента … проблема в том, что если я укажу его как выбранный по умолчанию…

введите описание изображения здесь

Вот моя информация о vuejs:

введите описание изображения здесь

Моя функция searchCustomers для извлечения данных в «параметры»:

 searchCustomers(search){

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

            axios.get('api/customer?nomina=amp;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>
 

Каков был бы правильный способ передать идентификатор и назначить правильного клиента v-form?

Комментарии:

1. Я не понимаю ваших потребностей, но вы должны использовать map или foreach и отображать его в настройках

Ответ №1:

Что-то вроде этого должно сработать. Здесь показано, как вы можете присвоить выбранное значение полям формы. Для входных данных хитрость заключается 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>