vue全局组件与局部组件的区别与用法案例

1. 全局组件

全局组件是在Vue应用的根实例中注册的组件,这意味着它们可以在整个应用的任何地方使用,包括其他组件的模板中。全局组件通常用于在整个应用中共享的通用组件,例如导航栏、页脚或弹窗。

1.1 全局组件的注册

// main.js
import Vue from 'vue';
import App from './App.vue';
import MyGlobalComponent from './components/MyGlobalComponent.vue';

Vue.component('my-global-component', MyGlobalComponent);

new Vue({
  render: h => h(App)
}).$mount('#app');

1.2 全局组件的使用

<!-- 在任何组件的模板中可以直接使用全局组件 -->
<template>
  <div>
    <my-global-component />
  </div>
</template>

2. 局部组件

局部组件是在另一个组件的模板中注册的组件,这意味着它们只能在包含它们的组件及其子组件中使用。局部组件通常用于封装和组织相关的功能模块,使得组件更具可重用性和独立性。

2.1 局部组件的注册与使用

<template>
  <div>
    <!-- 在组件的模板中注册并使用局部组件 -->
    <my-local-component />
  </div>
</template>

<script>
import MyLocalComponent from './MyLocalComponent.vue';

export default {
  components: {
    'my-local-component': MyLocalComponent
  }
};
</script>

3. 用法案例

3.1 全局组件用法案例

假设我们有一个网站,所有页面都需要显示一个通用的页脚。我们可以创建一个全局组件来表示这个页脚,并在整个应用的每个页面中使用它。

写一个页脚的vue

<!-- MyGlobalFooter.vue -->
<template>
  <footer>
    <p>© 2023 My Website. All rights reserved.</p>
  </footer>
</template>

<script>
export default {
  // 组件的逻辑和数据
};
</script>

<style>
/* 组件的样式 */
footer {
  background-color: #f0f0f0;
  padding: 20px;
  text-align: center;
}
</style>

使用Vue.component()注册为全局组件

<!-- main.js -->
import Vue from 'vue';
import App from './App.vue';
import MyGlobalFooter from './components/MyGlobalFooter.vue';

Vue.component('my-global-footer', MyGlobalFooter);

new Vue({
  render: h => h(App)
}).$mount('#app');

接下来,我们可以在整个应用的任何地方使用它:

<!-- Home.vue -->
<template>
  <div>
    <!-- 在任何组件的模板中可以直接使用全局组件 -->
    <my-global-footer />
  </div>
</template>

3.2 局部组件用法案例

假设我们有一个产品列表页,需要在页面中显示产品列表。我们可以创建一个局部组件来表示单个产品项,并在产品列表组件中使用它。

<!-- ProductListItem.vue -->
<template>
  <div class="product-item">
    <img :src="product.imageUrl" alt="Product Image" />
    <h3>{{ product.name }}</h3>
    <p>{{ product.price }}</p>
  </div>
</template>

<script>
export default {
  // 组件的逻辑和数据
  props: ['product'],
};
</script>

<style>
/* 组件的样式 */
.product-item {
  border: 1px solid #ccc;
  padding: 10px;
  margin-bottom: 20px;
}
.product-item img {
  width: 100%;
  height: auto;
}
</style>

<!-- ProductList.vue -->
<template>
  <div>
    <h2>产品列表</h2>
    <div v-for="product in products" :key="product.id">
      <!-- 在组件的模板中注册并使用局部组件 -->
      <product-list-item :product="product" />
    </div>
  </div>
</template>

<script>
import ProductListItem from './ProductListItem.vue';

export default {
  // 组件的逻辑和数据
  components: {
    'product-list-item': ProductListItem
  },
  data() {
    return {
      products: [
        {
          id: 1,
          name: 'Product A',
          price: '$50',
          imageUrl: 'product-a.jpg'
        },
        {
          id: 2,
          name: 'Product B',
          price: '$40',
          imageUrl: 'product-b.jpg'
        },
        // 更多产品...
      ]
    };
  },
};
</script>

在这里,我们定义了一个局部组件ProductListItem,并在ProductList组件中注册它。ProductList组件负责显示产品列表,并在其模板中使用了ProductListItem组件来渲染每个产品项。

通过全局组件和局部组件的合理使用,我们可以更好地组织和管理Vue应用中的组件,并使其更具可维护性和可重用性。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值