bkn*_*lpr 4 javascript typescript vue.js
我是 Vue Typescript 的新手。我尝试创建全局组件,但收到警告并且组件未加载到模板上。这就是我尝试创建全局组件的方式
应用程序.vue
import { createApp } from "vue"
import App from "./App.vue"
import "./registerServiceWorker"
import "./globalComponents"
import router from "./router"
import store from "./store"
createApp(App)
.use(store)
.use(router)
.mount("#app")
Run Code Online (Sandbox Code Playgroud)
全局组件.ts
import { createApp } from "vue"
const app = createApp({})
// Forms
app.component("ui-input", () => import("@/components/core/ui/Input.vue"))
Run Code Online (Sandbox Code Playgroud)
输入.vue
<template lang="pug">
.ui-input
input(v-model="$attrs" v-on="$listeners")
</template>
<script lang="ts">
import { defineComponent } from "vue"
export default defineComponent({
inheritAttrs: false
})
</script>
Run Code Online (Sandbox Code Playgroud)
希望大家能够帮助我,先谢谢了
从 Vue 3 开始,如果您使用 创建应用程序createApp,它将是一个独立的 Vue App 实例。因此,如果您需要添加全局组件,那么您需要将其添加到app从 创建的对象上createApp,以下是代码:
const app = createApp({});
app.component('my-component-name', MyComponent) // <-- here you can register.
app.mount("#app");
Run Code Online (Sandbox Code Playgroud)
但是如果有很多组件那么将它们添加到main.ts文件中将会很混乱,所以我们可以像您一样创建另一个文件,所以:
globalComponents.tsimport { createApp } from "vue"
const app = createApp({})
// Forms
app.component("ui-input", () => import("@/components/core/ui/Input.vue"))
Run Code Online (Sandbox Code Playgroud)
但请注意这里有一个错误。它是什么?app您使用创建了另一个createApp。正如我之前提到的,如果您需要创建全局组件,则只能在同一个实例上创建。
正如我们所知,这里的问题是我们正在创建另一个实例,这又是一个新的独立实例,因此我们需要弄清楚如何也可以拥有相同的app实例globalComponents.ts,因此我们将传递appfrom main-tsto globalComponents.ts,例如:
import { App } from "vue";
// register components
export const registerComponents = (app: App): void => {
app.component("ui-input", () => import("@/components/core/ui/Input.vue"));
}
Run Code Online (Sandbox Code Playgroud)
现在您可以registerComponents通过main.ts以下方式调用:
const app = createApp(App)
.use(store)
.use(router);
registerComponents(app); // <-- here you go
app.mount("#app");
Run Code Online (Sandbox Code Playgroud)
你仍然会得到类似的东西:
[Vue 警告]:无效的 VNode 类型:未定义(未定义)。
您可以在此处阅读有关如何在 vue 3 中定义异步组件的更多信息。要修复该错误,您需要将您的import内容包装defineAsyncComponent为:
import { defineAsyncComponent } from "vue";
// register components
export const registerComponents = (app) => {
app.component(
"ui-input",
defineAsyncComponent(() => import("@/components/Input.vue"))
);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2423 次 |
| 最近记录: |