代码之家  ›  专栏  ›  技术社区  ›  Tyssen

Vue3组件中没有可用的道具

  •  0
  • Tyssen  · 技术社区  · 6 月前

    我有一个Twig模板:

    <div
        class="multiSelect"
        id="{{ id }}"
        data-options="{{ options|json_encode }}"
        data-field="{{ handle }}"
    >
        <div class="selectComponent"></div>
    </div>
    

    以及执行挂载的js文件:

    multiSelects.forEach((el) => {
       const component = el.querySelector('.selectComponent');
       const options = el.dataset.options || '[]';
       const field = el.dataset.field || '';
       console.log('Field before mounting:', field);
       console.log('Items before mounting:', options);
       const multiSelect = createApp(MultiSelect);
       multiSelect.use(vuetify).mount(component, {
           props: {
               items: options,
               field: field,
           }
        });
    });
    

    其将正确的值输出到控制台。

    在页面上,组件确实会呈现,但它说“没有可用数据”。在控制台中,它输出一个空字符串或数组。

    这是组件的代码。

    <template>
      <v-select
        v-model="selectedvalue"
        :items="items"
        :name="field"
        item-text="title"
        item-value="id"
        label=""
        chips
        multiple
      ></v-select>
    </template>
    
    <script>
      export default {
        props: {
          items: {
            type: Array,
            default: () => []
          },
          field: {
            type: String,
            default: ''
          }
        },
        data() {
          console.log('After mounting items:', this.items);
          console.log('After mounting field:', this.field);
          return {
            selectedvalue: [],
          }
        }
      }
    </script>
    

    因此,组件中的道具似乎没有被正确拾取。为什么?

    1 回复  |  直到 6 月前
        1
  •  1
  •   yoduh    6 月前

    根组件道具应该是第二个参数 createApp() ,不 mount() 。请参阅 documentation 以供参考。您传入的对象也不正确。删除 props 钥匙。它应该只是prop键值对。

    const multiSelect = createApp(MultiSelect, {
      items: options,
      field: field,
    });
    multiSelect.use(vuetify).mount(component);