Vue全局组件

全局组件

首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互喷不会进步,相互指点才会。。。。谢谢大家啦

目录

📌全局组件是通过 Vue.component 方法注册的,它实际上是一个 Vue 组件的构造函数的实例。当你全局注册一个组件后,这个组件就可以在整个应用中的任何地方使用。

通过 Vue.component 方法定义全局组件。这个方法接受两个参数:

  1. 组件的名称:在模板中使用的标签名。
  2. 组件的选项对象:包含组件的模板、数据、方法等。
  3. 全局组件通过 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>

优点

  1. 方便复用:全局组件可以在应用程序的任何地方使用,不需要重复注册。
  2. 统一管理:所有全局组件可以集中管理,便于维护和更新。
  3. 简化模板:在需要频繁使用的组件时,全局注册可以简化模板中的组件引用。
  4. 命名约定:全局组件名称最好遵循 kebab-case(短横线连接)命名法,以避免与 HTML 元素名称冲突。

场景

  1. 通用组件:如按钮、表单输入、模态框等在多个地方使用的通用 UI 组件。
  2. 基础布局:如页面布局组件(头部、底部、侧边栏)等。
  3. 第三方组件库:通过全局注册引入和使用第三方 UI 库的组件。

缺点

  1. 命名冲突:全局组件在全局命名空间中注册,可能会导致命名冲突。
  2. 潜在的依赖性:全局组件在任何地方都可用,可能会导致组件之间的耦合度增加。
  3. 加载时间:全局组件在应用程序启动时加载,可能会增加初始加载时间,特别是当组件数量较多时。
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值