美文网首页
vue组件间通信

vue组件间通信

作者: 一枚小菜 | 来源:发表于2020-03-30 17:40 被阅读0次

组件间通信有5种方式:props,自定义事件,订阅和发布,slot,vuex

props接收

父组件传方法或函数给子组件时的写法如下,:后面的是父组件传的属性名,‘’‘’里面时子组件接收的属性名,一般设置为相同

//父组件传一个方法属性
<todo-header :addTodo="addTodo"/>

子组件接收时有两种写法

//直接指定属性名
props: ['addTodo']
//指定属性名和属性值的类型为方法
  props: {
      addTodo: Function
    }

自定义事件

自定义事件分为绑定监听和触发,父组件绑定自定义事件,子组件触发,语法如下:

v:on 自定义名="函数名"//绑定
$emit('函数名',data)//监听

有两种自定义事件的写法
第一种:

//绑定addTodo监听事件
<todo-header @addTodo="addTodo"/>
    methods: {
      //添加方法
      addTodo (todo) {
        this.todos.unshift(todo)
      },
//触发自定义事件:addTodo
      this.$emit('addTodo', todo)

第二种:
通过ref属性绑定标签

<todo-header ref="header"/>
   mounted () {//执行异步代码
      //给<todoheader/>绑定addTodo事件监听
     this.$refs.header.$on('addTodo,this.addTodo')
    },

第一种适用于父子组件的数据传递,代替函数属性,当子组件下还有子组件时,使用第二种

消息订阅发布

使用pubsub库,可以实现兄弟组件间通信,例如搜索
安装导入pubsub-js

//发布
   PubSub.publish('id', msg)
//订阅
PubSub.subscribe('id', (msg) => {

slot

插槽,传的是标签体,当组件使用多次时使用slot占位

//父组件
<div slot=''></div>
//子组件
<slot name=''></slot>

VueX

(未完待续)

相关文章

网友评论

      本文标题:vue组件间通信

      本文链接:https://www.haomeiwen.com/subject/fydeuhtx.html