vue组件通信

2017-10-27  本文已影响0人  黄鹤你不是人

1.父组件传递数据给子组件

思路:在父组件中定义inputValue属性,然后再props接收参数
注意此方法是传递的动态数据,在父组件接收时需要应用:(v-bind的简写)接收
代码如下:

父组件

<template>
  <div>
    <input type="text" v-model="msg">
    <br>
    //将子控件属性inputValue与父组件msg属性绑定
    <child :inputValue="msg"></child>
  </div>
</template>
<style>

</style>
<script>
  export default{
    data(){
      return {
        msg: '请输入'
      }
    },
    components: {
      child: require('./Child.vue')
    }
  }
</script

子组件

<template>
  <div>
    <p>{{inputValue}}</p>
  </div>
</template>
<style>

</style>
<script>
    export default{
        props: {
          inputValue: String
        }
    }
</script>

2.子组件向父组件传递
(1)子组件$emit,父组件v-on
思路:子组件使用$emit,$('自定义的事件名称',需要传递的参数),在父组件中v-on:自定义事件的名称=“接收到参数后的方法”

代码如下:

父组件

<template>
  <div>
//message为子控件上绑定的通知;recieveMessage为父组件监听到后的方法
    <child2 v-on:message="recieveMessage"></child2>
  </div>
</template>
<script>
  import {Toast} from 'mint-ui'
  export default{
    components: {
      child2: require('./Child2.vue'),
      Toast
    },
    methods: {
      recieveMessage: function (text) {
        Toast('监听到子组件变化'+text);
      }
    }
  }
</script>

子组件

<template>
  <div>
    <input type="text" v-model="msg" @change="onInput">
  </div>
</template>
<script>
  export default{
    data(){
      return {
        msg: '请输入值'
      }
    },
    methods: {
      onInput: function () {
        if (this.msg.trim()) {
          this.$emit('message', this.msg);
        }
      }
    }
  }
</script>
上一篇 下一篇

猜你喜欢

热点阅读