美文网首页
vue中组件传值

vue中组件传值

作者: guoss | 来源:发表于2019-08-12 20:43 被阅读0次

    1.父组件向子组件传值(假设子组件是child)
    父组件中首先引入子组件,通过在components中注册子组件

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

    在子组件中

    <template>
      <div>
        子组件:
        <span>{{name}}</span>
      </div>
    </template>
    <script>
      export default  {
        // 接受父组件的值
        props: ['name']
      }
    </script>
    

    props的形式

    props:  {
      name: {
        required: false,
        default: false,
        type: String 
      }
    }
    或者是下面的都是可以的
     props: ['name']
    

    2.子组件向父组件传值

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

    在父组件中

    <template>
      <div>
        父组件:
        <span>{{name}}</span>
        <!-- 引入子组件 定义监听子组件变化的函数-->
        <child @childFunction="childFunction"></child>
      </div>
    </template>
    <script>
      import child from './child'
      export default {
        components: {
          child
        },
        data () {
          return {
            name: ''
          }
        },
        methods: {
          childFunction: function (childValue) {
            // childValue就是子组件传过来的值
            this.name = childValue
          }
        }
      }
    </script>
    

    3.非父子组件的传值
    主要通过公共的vue实例进行传值
    新建bus.js

    import Vue from 'vue'
    export default new Vue()
    

    在组件A中

    <template>
      <div>
        A组件:
        <span>{{value}}</span>
        <input type="button" value="点击触发" @click="valueChange">
      </div>
    </template>
    <script>
      // 引入公共的bus,来做为中间传达的工具
      import Bus from './bus.js'
      export default {
        data () {
          return {
            value: 1
          }
        },
        methods: {
          valueChange() {
          // 发出dataChange事件
            Bus.$emit('dataChange', this.value)  
          }
        }
      }
    </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事件来监听dataChange事件的变化
          Bus.$on('dataChange', (data) => {
            console.log(data)
            vm.name = data
          })
        },
        methods: {
          getData () {
            console.log(this.name)
          }
        }
      }
    </script>
    

    相关文章

      网友评论

          本文标题:vue中组件传值

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