vue知识点总结(二)—— 组件通信

87 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章vue知识点总结(一)—— 组件化开发中,我们学习了vue相关知识点,包括组件化开发、组件注册等相关知识点。今天,在这篇文章中,vue其他的相关知识点,包括组件通信、生命周期等相关知识点。

组件通信

每个组件都有自己的数据, 提供在data中, 每个组件的数据是独立的, 组件数据无法互相直接访问。但是如果需要跨组件访问数据, 就需要用到组件通信。组件通信的方式有很多,比如父传子、子传父。

父传子props传值

父组件通过给子组件加属性传值。

<jack price="100" title="不错" :info="msg"></jack>

子组件中, 通过props属性接收。

props: ['price', 'title', 'info']

props校验

props 是父传子, 传递给子组件的数据, 为了提高子组件被使用时的稳定性, 可以进行props校验, 验证传递的数据是否符合要求。

默认的数组形式, 不会进行校验, 如果希望校验, 需要提供对象形式的 props。

props: {
	...
}

props 提供了多种数据验证方案,例如:

  • 基础的类型检查 Number
  • 多个可能的类型 [String, Number]
  • 必填项校验 required: true
  • 默认值 default: 100
  • 自定义验证函数
{
  props: {
    // 基础的类型检查
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
 
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
       return ['zs', 'ls', 'ww'].includes(value)
      }
    }
  }
}

props和data区别

组件中的数据来源有data和props。data 中的数据允许修改, props 中的数据不允许修改。遵循开发规范: 单向数据流。

子传父

子组件可以通过 this.$emit('事件名', 参数1, 参数2, ...) 触发事件的同时传参的。

this.$emit('say-price', this.item.id, Math.floor(Math.random() * 3) + 1) // 1 2 3

父组件给子组件注册一个自定义事件。

<my-product 
  ...
  @say-price="sayPrice">
</my-product>

父组件并提供对应的函数接收参数。

methods: {
  sayPrice (num) {
    console.log(num)
  }
},

通用组件通讯方案 —— event-bus

如果两个组件的关系非常的复杂,那么通过父子组件通讯是非常麻烦的。这时候可以使用通用的组件通讯方案:事件总线(event-bus)。

  1. 创建事件总线,在main.js文件中
1. 创建事件总线   main.js
const bus = new Vue()
// 把bus挂载到了Vue的原型上, 保证所有的组件都能通过 this.bus访问到事件总线
Vue.prototype.bus = bus
  1. 通过this.bus.$on('事件名', 事件回调函数)订阅事件。
2. 订阅事件 
bus.$on('事件名', 事件回调函数)
bus.$on('send', msg => {
  
})
  1. 通过this.bus.$emit('事件名', 额外参数)发布事件。
bus.$emit('事件名', 额外参数)
bus.$emit('send', 'hello')

生命周期

生命周期指的是一个事物从出生到消亡的全部过程。

生命周期(Life Cycle)是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。例如,张三出生,表示这个人生命周期的开始。张三离世,表示这个人生命周期的结束。中间张三的一生,就是张三的生命周期。

我们可以把每个vue组件运行的过程,也概括为生命周期。

  • vue 组件的初始化,表示生命周期的开始。
  • vue 组件的销毁,表示生命周期的结束。
  • vue 组件中间运行的过程,就是组件的生命周期。

生命周期函数(钩子函数)

生命周期函数是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行。生命周期函数的作用是允许我们在特定的时间点,执行某些特定的操作。例如,组件创建完毕后,可以在created 生命周期函数中发起Ajax 请求,从而初始化 data 数据。