vue组件传值问题, [ 相对于框架而言 ] , 发现官网都是相对于引入vue文件的说明文档, 其实大同小异

1. 父子组件传值

这个是最简单的,比如说, app.vue ( 一般默认是最大的组件 ) 组件中data中的数据,需要传递给子组件

component-a

使用

// app.vue 中template中的引入的组件a的内容
<component-a :msg1="msg1"></component-a>
// app.vue 组件中的data中的数据 
data: function() { return { msg1: 'hello msg1------------' } }

使用 :msg1 = 'msg1'   的形式, 在a组件的根组件标签中获取到app.vue组件中的内容

在组件a的vue文件中,使用props接收传递过来的参数,并且初始化为data中的数据

  data: function() {
    return {
      msg11: this.msg1
    }
  },
  props: ['msg1']

最后,在组件a中就能直接使用了

  <div>
    <p>子组件a的内容</p>
    <p>------------------------------------</p>
    <p>{{msg11}}</p>
  </div>

==================================================================

2. 子组件向父组件传值

在子组件的data中初始数据

  data: function() {
    return {
      msg2: '这是子组件a的内容'
    }
  }

在子组件中添加一个按钮触发事件

<button @click="$emit('add', msg2)">子组件中的按钮</button>

核心, 使用this.$emit ' 注册 ' 自定义事件, 事件名称叫add, 携带的参数为 msg2

在父组件中使用子组件的标签中

<component-a @add="add" :msg1="msg1"></component-a>

把上面的 ' 自定义事件 ' 也就是 add 当成正规事件,进行事件绑定 

在父组件的事件处理中添加 add 对应的函数

  methods: {
    add(e) {
      this.msg2 = e
    }
  }

初始为父组件data中的初始数据,在页面中使用就能看到结果

    <p>组件a传递过来的数据是------------{{msg2}}</p>

==================================================================

3. 兄弟组件传值

兄弟组件传值相对而言复杂一丢丢,所以写的详细点

原理: 利用vue创建一个新的实例,假如说叫   eventBus , 通过 eventBus .$emit()  注册事件, 通过 eventBus.$on()  进行事件监听

父组件内容,其他的都是默认的

  <div>
    <component-a></component-a>
    <p>----------华丽的分隔符------------</p>
    <component-b></component-b>
  </div>

子组件a中的内容, 通过标签触发事件 

<button @click="a_btn">组件a中的按钮</button>

子组件a的methods中的事件, 通过事件中心点emit的方式触发一个名叫  event-b 的事件 , 并且携带 子组件 a 中. data中的数据  msg3

  methods: {
    a_btn() {
      eventBus.$emit('event-b', this.msg3)
    }
  }

在子组件 b 中

  created() {
    eventBus.$on('event-b', function(e) {
      console.log(e)
    })
  }

直接在created中监听 event-b事件   ( 事件其实应该写在methods中, 在created中调用 ) 

就能直接打印出组件a中传递过来的值

1. 受单向数据流影响, 接收到的别的组件传递过来的参数, 建议在data中初始化为当前组件的数据

2. 凡是组件通过传值接收到的参数 , 都不建议直接修改 (好像也不会报错...)

 

补充一下我在eventBus中的做的事情

 

import Vue from 'vue'

export default new Vue()

 

在网上看到很多不同的版本, 需要说的是, 我  <== 在vue框架中使用的使用, 导出需要加括号,也就是 new Vue()  这个括号 , 在网上也看到很多人不加就能用, 具体加不加,自己试试就知道了

 

posted @ 2020-06-12 15:23  深海里的星星i  阅读(125)  评论(0)    收藏  举报