Używam niestandardowego komponentu rozwijanego "Vue-select", ma opcję gniazda, dzięki której możemy dostosować widok opcji, jak pokazano w tym dokumencie - & GT; https://vue-select.org/guide/slots.html

Podobna rzecz, którą chcę go osiągnąć, przekazując szczelinę z składnika dziadka. Oto, czego próbowałem.

App.Ve (składnik dziadku)

<template>
  <div id="app">
    <v-select-wrapper v-model="selectedData" :options-data="[{
        id:1,
        label: 'New York'
      }, {
        id:2,
        label : 'London'
      }]">
      <template v-slot:option-data="option">
        {{option.id}} -
        {{ option.label }}
      </template>
    </v-select-wrapper>
  </div>
</template>

Vselectwrapper.vue (składnik rodzicielski)

<template>
  <v-select :options="optionsData" :value="value" @input="inputChanged">

    <template v-slot:option="option">
      <slot name="option-data"/>
    </template>
  </v-select>
</template>

<script>
  import vSelect from "vue-select";

  export default {
    name: "VSelectWrapper",
    components: {
      vSelect
    },
    props: {
      optionsData: {type: Array},
      value: {}
    },
    methods: {
      inputChanged(val) {
        this.$emit("input", val);
      }
    }
  };
</script>

Wyjście, które odbieram, jest tylko znakiem "-" (łącznik) w opcji rozwijanej. Dane nie są przekazywane przez gniazdo.

Jak to osiągnąć?

0
aniket_777 15 styczeń 2020, 20:42

1 odpowiedź

Najlepsza odpowiedź

Powodem, dla którego twoje rekwizyty nie są przekazywane, ponieważ nie wiążysz niczego na gnieździe, aby odebrać od dzieci. Aby to zrobić, po prostu musisz dodać v-bind="option" gdzie option jest właściwością slotu vue-select samego składnika:

VSelectWrapper.vue

<v-select
  :options="optionsData"
  :value="value"
  @input="inputChanged">
  <template v-slot:option="option">
    <slot name="option-data" v-bind="option"></slot>
  </template>
</v-select>
1
Yom S. 15 styczeń 2020, 19:21