父子组件通信

2019-07-10  本文已影响0人  lyp82nkl

组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。

父组件向子组件传递数据

<div id="app">
    <child-component msg="你好"></child-component>    // 渲染子组件,并传递 msg
</div>

var app = new Vue({
  el: '#app',
  data: {},
  components: {    // 定义子组件
    'child-component': {
      props: ['msg'],  // 子组件使用 props 接收父组件传递的 msg
      template: `<h1>{{ msg }}</h1>`  // 4. 在 template 中使用 msg
    }
  }
})

使用 v-bind 绑定数据

<div id="app">
    <input type="text" v-model="text">  // input 中使用 v-model 动态绑定了父组件中的 text
    <child-component :ada="text"></child-component>  // 在子组件上绑定 dong 属性,值为父组件中的 text
</div>

var app = new Vue({
  el: '#app',
  data: {
    text: '你好'
  },
  components: {
    'child-component': {
      props: ['ada'],  // 接收 dong 属性
      template: `<h2>{{ada }}</h2>`  // 使用 dong 属性
    }
  }
})

子组件中的内容,是父组件通过使用 v-bind 传递过来的,传过来的是父组件中的 text。而父组件中的 input 又使用了 v-model 绑定了 text,所以,当改变 input 中的内容时,父组件中的 text 就会改变,text 又传递到子组件,子组件中的内容也会跟着改变。
使用 v-bind 和 不使用 v-bind 的区别:不使用 v-bind,传的是字符串;使用 v-bind,传的是什么就是什么。

子组件向父组件传递数据

    <div id="app">
        现在的余额是{{total}}
        <son-component @change="handleTotal"></son-component> 
     <!-- @change 自定义事件 -->
    </div>
<script>
    var app = new Vue({
            el: '#app',
            data: {
                total: 1000
            },
            methods: {
                handleTotal: function (value) {
                    //此处的形参 value 就是传递过来的数据
                    this.total = value;
                }
            }
        }),

        components: {
            'son-component': {
                template: `
                <div>
                  <button @click="handleincrease">+100</button>   
                  <button @click="handlereduce">-100</button>   
                </div> `,
                data: function () {
                    return {
                        count: 100
                    }
                },

                methods: {
                    handleincrease: function () {
                        this.count = this.count + 100
                        this.$emit('change', this.count)
                        //第一个参数是事件名,后边的参数是要传递的数据
                    },
                    handlereduce: function () {
                        this.count = this.count - 100
                        this.$emit('change', this.count)
                    }
                }
            }
        }
</script>
上一篇下一篇

猜你喜欢

热点阅读