美文网首页
父子组件传值

父子组件传值

作者: 猫晓封浪 | 来源:发表于2020-04-09 11:02 被阅读0次
  • 父组件通过属性的形式向子组件传值,子组件通过 props 接收
  • 单向数据流:父组件可以随意的向子组件传递参数,但是子组件绝对不能反过来修改父组件传过来的参数。(如果父组件传过来的是引用类型数据,当子组件修改父组件传过来的值,有可能影响到其他也使用该引用类型数据的子组件)
  • 子组件可以克隆(在子组件 data 中定义 son: this.parent )出父组件传过来的参数进行修改
  • 子组件通过触发( this.$emit() )父组件事件向外传值
  <div id="app">
    <!-- 父组件通过绑定属性 count 向子组件传值 -->
    <counter :count="1" @watch="addCounts"></counter>
    <counter :count="2" @watch="addCounts"></counter>
    <div>{{total}}</div>
  </div>
  <script>
    var counter = {
      props: ["count"], // 子组件通过 props 接收父组件的传值
      data: function(){ // 子组件中 data 必须是一个方法,不能是对象
        return {
          num: this.count // 通过克隆的方式修改父组件传值,即不直接修改父组件值(单向数据流)
        }
      },
      template: "<div @click='add'>{{num}}</div>",
      methods: {
        add: function(){
          this.num = this.num + 2
          this.$emit("watch", 2) // 子组件通过 this.$emit() 触发父组件事件,第二个参数为所携带值
        }
      }
    }
    var vm = new Vue({
      el: "#app",
      data: {
        total: 3
      },
      components: {
        counter: counter
      },
      methods: {
        addCounts: function(value){
// 此时 value 就是子组件通过 this.$emit() 传过来的第二个参数
          this.total = this.total + 2
        }
      },
    })
  </script>

相关文章

网友评论

      本文标题:父子组件传值

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