• 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">changebutton>

        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">change2button>

        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">change3button>

        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为参数

     

  • 相关阅读:
    文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《多时间尺度下计及综合需求响应和碳捕集-电转气联合运行的综合能源系统优化调度》
    acwing算法提高之图论--单源最短路的综合应用
    电脑一直蓝屏怎么办?重装系统方法
    【Flink 问题】Flink 如何提交轻量jar包 依赖该如何存放 会遇到哪些问题
    vue实现简单的购物车案例
    【04-提升模型性能:集成学习与超参数优化】
    HiveServer2 简单用户/密码身份验证
    点云入门知识
    git 给分支添加描述
    【牛客 - 剑指offer】JZ64 求1+2+3+...+n Java实现
  • 原文地址:https://blog.csdn.net/cjx177187/article/details/126871603