全局组件
首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互喷不会进步,相互指点才会。。。。谢谢大家啦
目录
- 全局组件
- 目录
- 内置模板
- 引入模板
- 优点
- 场景
- 缺点
📌全局组件是通过
Vue.component
方法注册的,它实际上是一个Vue
组件的构造函数的实例。当你全局注册一个组件后,这个组件就可以在整个应用中的任何地方使用。
通过 Vue.component
方法定义全局组件。这个方法接受两个参数:
- 组件的名称:在模板中使用的标签名。
- 组件的选项对象:包含组件的模板、数据、方法等。
- 全局组件通过
Vue.component()
方法注册全局组件,可以在应用的任何位置使用。例如:
// 定义一个全局组件
Vue.component('my-component', {template: '<div class="my-component">{{ message }}</div>',data() {return {message: 'Hello from MyComponent!'};}
});// 创建 Vue 实例
new Vue({el: '#app',template: `<div><h1>Hello from Parent Component!</h1><my-component></my-component></div>`
});
这些组件是全局注册的。也就是说它们在注册之后可以用在任何新创建的 Vue 根实例 (new Vue
) 的模板中。比如:
<div id="app"><component-a></component-a><component-b></component-b><component-c></component-c>
</div>Vue.component('component-a', { /* ... */ })
Vue.component('component-b', { /* ... */ })
Vue.component('component-c', { /* ... */ })new Vue({ el: '#app' })
📌在所有子组件中也是如此,也就是说这三个组件在各自内部也都可以相互使用。
内置模板
📌在
component
中直接书写template
,极度不推荐
<script src="../../vue.js"></script><body><div id="app">{{title}}<!-- 全局组件的使用 --><hello></hello><hello></hello><hello></hello><!-- 多次使用相当于多次new,所有的组件使用之间并无关联 -->这部分在后来的VueComponent中会有解释</div></body><script>new Vue({el:"#app"})// 定义全局组件// component组件定义("组件名字",{组件数据})Vue.component("hello", {// 定义当前组件的结构template: `<div><p>这是{{title}}组件</p><span>{{num}}</span><hr><button @click="add">按钮</button></div>`,// 定义当前组件的数据data() {return {title: "hello world",num: 0,};},// 定义当前组件的方法methods: {add() {this.num++;},},});</script>
📌但是以上案例并不推荐使用,因为在js的字符中书写
html
代码,不会自动进行语法检查,不方便书写,也不方便调试
引入模板
📌建议使用
vue
提供的template
标签,创建模板,然后再注册到组件
<script src="../../vue.js"></script><body><div id="app"><!-- 使用全局组件 --><world></world></div></body><!-- 使用模板 --><template id="aaa"><div><h4>{{title}}</h4><input type="text" v-model="msg" /><span>{{msg}}</span></div></template><script>let app = Vue.createApp({data() {return {title: "这是全局组件",};},});// 定义全局组件方法二// component组件定义("组件名字",{组件数据})app.component("world", {template: "#aaa",// 定义当前组件的数据data() {return {title: "hello world",msg: "今天不太开心",};},});app = app.mount("#app");</script>
优点
- 方便复用:全局组件可以在应用程序的任何地方使用,不需要重复注册。
- 统一管理:所有全局组件可以集中管理,便于维护和更新。
- 简化模板:在需要频繁使用的组件时,全局注册可以简化模板中的组件引用。
- 命名约定:全局组件名称最好遵循
kebab-case
(短横线连接)命名法,以避免与HTML
元素名称冲突。
场景
- 通用组件:如按钮、表单输入、模态框等在多个地方使用的通用
UI
组件。 - 基础布局:如页面布局组件(头部、底部、侧边栏)等。
- 第三方组件库:通过全局注册引入和使用第三方
UI
库的组件。
缺点
- 命名冲突:全局组件在全局命名空间中注册,可能会导致命名冲突。
- 潜在的依赖性:全局组件在任何地方都可用,可能会导致组件之间的耦合度增加。
- 加载时间:全局组件在应用程序启动时加载,可能会增加初始加载时间,特别是当组件数量较多时。