typescript - 如何在 Vue 中异步加载 vuetify 下拉(v-select)项目

标签 typescript vuejs2 vuetify.js

我在异步获取 v-select 的数据时遇到问题Vuetify 组件。问题是 v-select 组件仅对 :items 属性执行除 Array 之外的操作。异步获取数据的解决方法是什么:

Invalid prop: type check failed for prop "items". Expected Array, got Promise

模板:

<template>
    <v-layout row wrap>
        <v-flex xs12 md6 v-for="(field, index) in fields" :key="index" v-show="!field.hidden">
            <v-text-field v-if="field.component === 'v-text-field'" :label="field.label"></v-text-field>
            <v-select
                v-else-if="field.component === 'v-select' "
                :label="field.label"
                :items="(typeof field.items === 'string') ? getLookups(field.items) : []"
            ></v-select>
            <v-checkbox v-else-if="field.component === 'v-checkbox'" :label="field.label"></v-checkbox>
        </v-flex>
    </v-layout>
</template>

异步方法:

async getLookups( api: string | string[]) {
    // Mock Async timeout
    var wait = (ms: any) => new Promise((r, j) => setTimeout(r, ms));
    wait(2000);
    return ["test1", "test2", "test3", "test4"];
}

最佳答案

我发现的最佳解决方案/解决方法是创建一个局部变量并返回局部变量实例。我只是通过索引为我的动态组件创建一个唯一的对象

模板:

<template>
    <v-layout row wrap>
        <v-flex xs12 md6 v-for="(field, index) in fields" :key="index" v-show="!field.hidden">
            <v-text-field v-if="field.component === 'v-text-field'" :label="field.label"></v-text-field>
            <v-select
                v-else-if="field.component === 'v-select' "
                :label="field.label"
                :items="(typeof field.items === 'string') ? getLookups(index, field.items) : field.items"
            ></v-select>
            <v-checkbox v-else-if="field.component === 'v-checkbox'" :label="field.label"></v-checkbox>
        </v-flex>
    </v-layout>
</template>

脚本:

private lookups: any = {};

getLookups(index: number, api: string | string[]) {
    // Mock Async timeout
    var wait = (ms: any) => new Promise((r, j) => setTimeout(r, ms));
    wait(2000).then(() => {
        this.lookups[index] = ["test1", "test2", "test3", "test4"];
    });
    return this.lookups[index];
}

因此,v-select 组件将监听局部变量。一旦填充,它就会更新 v-select 项。

关于typescript - 如何在 Vue 中异步加载 vuetify 下拉(v-select)项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54321768/

相关文章:

javascript - Angular 2.0.2 - 静态解析符号值时遇到错误

TypeScript 增量严格性

vue.js - VueJS - 将插槽和作用域插槽传递给子模板中的组件

vue.js - Vuetify 如何添加自定义主题

javascript - Vue2 & $refs & 无法读取未定义的属性 'msg'

vue.js - 如何更改 v-slider 的大小?

css - 无法在 Vuetify v-btn-toggle 中为所选按钮设置事件类

reactjs - 为什么 React.FunctionComponenent 优于传统的函数定义?

javascript - 将sql查询解析为JSON

vue.js - 在 Vuetify 中将 Clipped prop 应用于 <v-navigation-bar/> 的正确方法