以编程方式实例化 vuetify-components

Posted

技术标签:

【中文标题】以编程方式实例化 vuetify-components【英文标题】:Programmatically instantiate vuetify-components 【发布时间】:2020-12-29 19:31:06 【问题描述】:

我正在尝试以编程方式实例化 vuetify-components 并将它们添加到 DOM。使用 v-cardv-dialoge 之类的简单组件可以正常工作,但不适用于 v-data-tables

我创建了一个代码框来展示这个问题:https://codesandbox.io/s/throbbing-butterfly-4ljhx?file=/src/components/MainWindow.vue

单击按钮添加表格时查看控制台中的错误。

谁能帮助我了解如何添加表格以及为什么会抛出这些类型错误?谢谢!

顺便说一句。我正在关注本指南:https://css-tricks.com/creating-vue-js-component-instances-programmatically/

【问题讨论】:

【参考方案1】:

您需要将 vuetify 实例传递给扩展的 Vue 构造函数,就像实例化主 Vue 实例时一样...

MainWindow.vue

<template>
  <v-app>
    <v-btn @click="addTable" color="red">Generate Data-Table</v-btn>
    <hr>
    <v-btn @click="addCard">Generate simple Card</v-btn>
    <v-container ref="mainContainer"></v-container>
  </v-app>
</template>

<script>
import Table from "./Table.vue";
import Card from "./Card.vue";
import Vue from "vue";
import vuetify from "../plugins/vuetify";

export default 
  name: "mainWindow",
  components:  Table, Card ,
  methods: 
    addTable() 
      var ComponentClass = Vue.extend(Table);
      var instance = new ComponentClass( vuetify );
      instance.$mount();
      this.$refs.mainContainer.appendChild(instance.$el);
    ,
    addCard() 
      var ComponentClass = Vue.extend(Card);
      var instance = new ComponentClass();
      instance.$mount();
      this.$refs.mainContainer.appendChild(instance.$el);
    
  
;
</script>

<style>
</style>

注意:不推荐在 Vue 中使用动态组件的方式!

来自链接的文章:

就我而言,我不知道要在模板中插入哪个组件以及在哪里插入它。此信息仅在运行时可用

这仅在您不知道“在哪里”时才有用。如果你知道“哪里”,“哪个”部分很容易用Dynamic Components解决

【讨论】:

如何将 props 传递给这个创建的组件? const ComponentClass = Vue.extend( props: ['name'], template: CustomTextField, );不工作,知道为什么吗?

以上是关于以编程方式实例化 vuetify-components的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式实例化 vuetify-components

以编程方式将委托实例化到组件

MonoTouch 以编程方式为 ContainerView 实例化 ViewController

以编程方式添加控件时未实例化占位符

如何在没有情节提要的情况下以编程方式实例化视图控制器

Vue.js:以编程方式实例化功能组件