Vue组件

122 阅读2分钟

什么是组件开发

组件就是可复用的vue实例,封装标签,样式,和代码

.vue组件分类:

  1. 页面组件
  2. 页面下的功能组件

组件化开发 :一个页面(.vue)可能有一个或多个组件(.vue)组成完整的页面功能

  • 封装的思想,把页面上 可重用的部分 封装为 组件,从而方便项目的 开发 和 维护

一个页面, 可以拆分成一个个组件,一个组件就是一个整体, 每个组件可以有自己独立的 结构(template) 样式(style) 和 行为(script) (html, css和js)

vue组件-封装使用

目标

掌握组件封装使用的基本步骤

为啥要封装组件

  1. 复用。一次封装,多次使用
  2. 代码整理,方便维护。

步骤

  1. 定义组件
  2. 注册组件
  3. 使用组件

Snipaste_2022-05-06_20-36-32.png

  1. 创建组件: MyCom.vue
  2. 引入并注册组件
// 局部注册组件

// 进入到当前组件内部
// 1. 导入组件
import 组件名 from './组件文件.vue'

// 2. 局部注册
export default {
   components: {
     组件名: 组件名
   }
}
  1. 使用组件。在当前页面中,当做标签来使用。

注意:

组件名不能与现有的html标签名一致。

小结

  • 每一个组件都是封闭的。它有自己的template, script,style
  • 组件之间可以相互引用使用。

vue组件-用scoped实现组件的私有样式

目标

解决多个组件样式名相同, 冲突问题

问题说明

默认组件style 中定义的样式是全局=》存在相同名字覆盖的情况

如何解决

在标签里加上scoped,如下:

Snipaste_2022-05-06_20-40-10.png

Snipaste_2022-05-06_20-40-52.png

Snipaste_2022-05-06_20-43-59.png

原理
● 在style上加入scoped属性, 就会在此组件的标签上加上一个随机生成的data-v开头的属性
● 而且必须是当前组件的元素或者子组件的根元素, 才会有这个自定义属性

Snipaste_2022-05-06_20-46-32.png

vue组件-/deep/深度作用选择符

问题导入

当父子组件都使用了scoped的情况下,如何在父组件中控制子组件的样式?

解决方案

父组件的选择器 /deep/ .子组件的选择器 父组件:

<template>
  <div class="box">
    <h1 class="red">父组件</h1>
    <hr />
+    <Child />
  </div>
</template>

<script>
import Child from '@/components/Child'
export default {
  components: {
    Child,
  },
}
</script>

<style scoped>
.red {
  color: blue;
}
+ .box /deep/ h2 {
+  color: lawngreen;
+ }
</style>

子组件:

<template>
  <div>
     <h2>子组件</h2>
     <p class="red">
      <span>123</span>
    </p>
  </div>
</template>

<script>
export default {

}
</script>

<style scoped>
.red {
  color: red;
}
</style>