组件封装和通讯的方法

vue组件的定义

● 组件(Component)是Vue.js最强大的功能之一

● 组件可以扩展HTML元素,封装可重用代码

● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能

● 有些情况下,组件也可以表现用 is 特性进行了扩展的原生的HTML元素

● 所有的Vue组件同时也都是Vue实例,所以可以接受相同的选项对象(除了一些根级特有的选项),并提供相同的生命周期钩子

vue组件的功能

1)能够把页面抽象成多个相对独立的模块

2)实现代码重用,提高开发效率和代码质量,使得代码易于维护

Vue组件封装过程

● 首先,使用Vue.extend()创建一个组件

● 然后,使用Vue.component()方法注册组件

● 接着,如果子组件需要数据,可以在props中接受定义

● 最后,子组件修改好数据之后,想把数据传递给父组件,可以使用$emit()方法

封装组件三要素

1.props:父传子

2.事件(派发和监听) this.$emit()派发事件 通过@或$on来监听事件

3.slot(插槽),内容分发 命名插槽 <slot name="命名插槽名"></slot>

例如:<slot name="qrcode"></slot> 使用: <div slot="qrcode"> ..... </div>

封装组件思考:

1.你想向用户暴露哪些属性 (props)

2.你想向用户暴露哪些事件,让用户监听来处理后续的业务 ($emit,@)

3.你想让用户嵌入哪些自定义的内容(slot)

组件的mixins(也称混入)

即将多个组件中,逻辑相同的部分抽离出来,相当于组件之间相同逻辑的复用!

步骤:
第一步:创建一个mixin文件(js文件)
const mixins = {
data() {
 return {
    w:'word'  
  }  

},
methods: {
 // 确定
 confirm () {
   //  this.app.getData(666);
   // 子级派发confirm事件
   this.$emit('confirm', { name: this.name, price: this.price })
 },
 // 取消
 cancel () {
   this.$emit('cancel')
 }
}
}

export default mixins;

第二步:引入到组件中并且通过mixins注入
import mixins from '../utils/mixin
export default {
   name: 'maskDialog',
   mixins: [mixins],
   props: {},
   methods:{}
}

组件分类:

1.业务组件 只能在当前项目中使用的组件例如:购物车,商品列表,登录  职位:前端程序员,码农,coder
2.公共组件:在项目中可以通用的项目  例如:星星评分,弹框, 职位:前端负责人,组长
3.基础组件:任何项目都能使用的组件 例如:封装一个icon图标组件,button按钮  职位:架构师,


$attrs

  主要用于接收没有通过props传递的属性,可以通过$attrs将父组件(shopping.vue)的值传递给中间组件(A组件)的子组件(B组件)



```
例如: <Bcom v-bind="$attrs"></Bcom>
B组件内部接收:通过{{ $attr.属性名接收}}
例如:{{ $attrs.name }}
```





  购物车组件>A组件->B组件



$listeners:主要用于由子组件向父组件传递事件

```
例如:由B组件派发事件到购物车组件,购物车如果要监听的事件,必须给A组件内部的B组件通过v-on添加$listeners,

 <Bcom v-bind="$attrs" v-on="$listeners"></Bcom>
```





> **说的再俗气一点:用本地存储也可以实现上面的所有通讯方式**
原文地址:https://www.cnblogs.com/akby/p/12975440.html