美文网首页
vue 父子传值

vue 父子传值

作者: 抬头丶看天空 | 来源:发表于2018-07-10 17:45 被阅读0次

1、父传子

  • 父组件:

      <template>
        <div>
          父组件:
          <input type="text" v-model="name">
          <br>
          <br>
          <!-- 引入子组件 -->
          <v-header :inputName="name"></v-header>
        </div>
      </template>
      <script>
        import child from './child'
        export default {
          
        components:{
          'v-header':child
        },
          data () {
            return {
              name: ''
            }
          }
        }
      </script>
    
  • 子组件:

      <template>
        <div>
          子组件:
          <span>{{inputName}}</span>
        </div>
    </template>
    <script>
    export default {
      // 接受父组件的值
      props: {
    inputName: String,
    required: true
      }
    }
      </script>
    

2、子传父

  • 子组件

      <template>
        <div>
        父组件:
        <span>{{name}}</span>
      <br>
      <br>
      <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
      <child v-on:childByValue="childByValue"></child>
      </div>
      </template>
      <script>
        import child from './child'
        export default {
          components: {
            child
          },
          data () {
            return {
              name: ''
            }
          },
          methods: {
            childByValue: function (childValue) {
              // childValue就是子组件传过来的值
              this.name = childValue
            }
          }
        }
      </script>
    
  • 父组件

      <template>
        <div>
          子组件:
          <span>{{childValue}}</span>
          <!-- 定义一个子组件传值的方法 -->
          <input type="button" value="点击触发" @click="childClick">
        </div>
        </template>
      <script>
      export default {
          data () {
      return {
        childValue: '我是子组件的数据'
      }
      },
      methods: {
    childClick () {
      // childByValue是在父组件on监听的方法
      // 第二个参数this.childValue是需要传的值
      this.$emit('childByValue', this.childValue)
        }
      }
    }
    </script>
    

3、非父子组件进行传值

  • 公共bus.js(中间传值仓库)

     //bus.js
     import Vue from 'vue'
     export default new Vue()
    
  • 组件A

      <template>
        <div>
          A组件:
          <span>{{elementValue}}</span>
          <input type="button" value="点击触发" @click="elementByValue">
        </div>
      </template>
      <script>
        // 引入公共的bug,来做为中间传达的工具
        import Bus from './bus.js'
        export default {
          data () {
            return {
              elementValue: 4
            }
        },
          methods: {
            elementByValue: function () {
              Bus.$emit('val', this.elementValue)
            }
          }
        }
      </script>
    
  • 组件B:

      <template>
        <div>
          B组件:
          <input type="button" value="点击触发" @click="getData">
          <span>{{name}}</span>
        </div>
      </template>
      <script>
        import Bus from './bus.js'
        export default {
          data () {
            return {
              name: 0
            }
          },
          mounted: function () {
            var vm = this
            // 用$on事件来接收参数
            Bus.$on('val', (data) => {
              console.log(data)
              vm.name = data
            })
          },
          methods: {
            getData: function () {
              this.name++
            }
          }
        }
    </script>

相关文章

网友评论

      本文标题:vue 父子传值

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