Vue---反向传值

利用组件的自定义事件反向修改父组件的值------$emit

 

1.父组件App中给子组件tbox进行属性绑定 和自定义事件绑定

 <tbox :属性值="参数" @自定义事件名称="函数名称"></tbox>

2.子组件中利用props接收属性

  props:["父组件传递的参数名称"],

3.子组件中利用this.$emit出发事件并向父组件传值

this.$emit("事件名称","传值")

注意这里的事件名称要和在父组件绑定的事件名称一致

4.父组件中调用自定义事件绑定的函数,并接受子组件传参

     自定义函数名称(e){

                 this.msg=e

  }

 

 

 

举例:

父文件

<template>

  <div class="mainbox">

    <div>father的数据-----{{msg}}</div>

 

   <tbox :msg="msg" @change="change"></tbox>

  </div>

</template>

<script>

import tbox from "./components/tbos.vue"

export default {

  data(){

    return{

      msg:"hello"

    }

  },

  components:{

    tbox,

},

methods:{

  change(e){

    this.msg=e

  }

}

}

</script>

子文件

<template>

    <div>

        <div>child的数据---{{msg}}</div>

        <button @click="change">change</button>

    </div>

</template>

<script>

// import axios from "axios"

export default {

    props:["msg"],

    data() {

        return {

        }

    },

    methods: {

        change(e){

            this.msg="666666"

            this.$emit("change","子组件修改了值")

           

        }

       

    },

     mounted(){

       

    }

}

</script>

 

 

 

利用.sync进行反向传值

 

App.vue文件

<template>

  <div class="mainbox">

    <div>father的数据-----{{msg}}</div>

 

   <tbox :msg="msg" @change="change"></tbox>

   <div>father的数据-----{{msg2}}</div>

   <tbox2 :msg2.sync="msg2"></tbox2>

  </div>

</template>

<script>

import tbox from "./components/tbos.vue"

import tbox2 from "./components/tbos2.vue"

export default {

  data(){

    return{

      msg:"hello",

      msg2:"heel2"

    }

  },

  components:{

    tbox,

    tbox2

},

methods:{

  change(e){

    this.msg=e

  },

  change2(e){

    this.msg2=e

  }

}

}

</script>

<style lang="scss">

.mainbox{

  width: 300px;

  height: 300px;

  border: 1px solid black;

  margin: 0 auto;

}

</style>

 

tboxs.vue文件

<template>

    <div>

        <div>child2的数据---{{msg2}}</div>

        <button @click="change2">change2</button>

    </div>

</template>

<script>

// import axios from "axios"

export default {

    props:["msg2"],

    data() {

        return {

        }

    },

    methods: {

        change2(e){

            // this.msg="666666"

            this.$emit("update:msg2","子组件2修改了值")

           

        }

       

    },

     mounted(){

       

    }

}

</script>

 

 

 

利用v-model进行反向传值

App.vue文件

<template>

  <div class="mainbox">

    <div>father的数据-----{{msg}}</div>

 

   <tbox :msg="msg" @change="change"></tbox>

   <div>father的数据-----{{msg2}}</div>

   <tbox2 :msg2.sync="msg2"></tbox2>

 

   <div>father的数据-----{{msg3}}</div>

   <tbox3 v-model="msg3"></tbox3>

  </div>

</template>

<script>

import tbox from "./components/tbos.vue"

import tbox2 from "./components/tbos2.vue"

import tbox3 from "./components/tbos3.vue"

export default {

  data(){

    return{

      msg:"hello",

      msg2:"heel2",

      msg3:"hello3"

    }

  },

  components:{

    tbox,

    tbox2,

    tbox3

},

methods:{

  change(e){

    this.msg=e

  },

  change2(e){

    this.msg2=e

  },

  change3(e){

    this.msg3=e

  }

}

}

</script>

<style lang="scss">

.mainbox{

  width: 300px;

  height: 300px;

  border: 1px solid black;

  margin: 0 auto;

}

</style>

 

tbos3.vue文件

<template>

    <div>

        <div>child3的数据---{{value}}</div>

        <button @click="change3">change3</button>

    </div>

</template>

<script>

// import axios from "axios"

export default {

    props:["value"],=====>重点

    data() {

        return {

        }

    },

    methods: {

        change3(e){

            // this.msg="666666"

            this.$emit("input","子组件3修改了值")//重点

           

        }

       

    },

     mounted(){

       

    }

}

</script>

注意:父组件传值一定要用v-model ,子组件接受值用value 利用$emit绑定事件时使用input为参数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值