美文网首页
vue 组件间传值

vue 组件间传值

作者: Gino_Li | 来源:发表于2019-04-11 20:05 被阅读0次

子组件向父组件传值

1.在子组件中定义一个事件
2.在事件中通过$emit方法传递数据
3.在父组件中注册通过$emit定义的事件
4.通过父组件中注册的事件获取到数据

$emit(name,data);
作用:注册一个自定义事件,并发送数据
name:表示自定义事件
data:表示要发送的数据

<body>
    <div id="app">
        <test @toparent="getson"></test>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var test = {
            template:`
                    <ul>
                        <li @click="getIndex(index)" v-for="(val,index) in list">{{val}}</li>//在子组件中定义一个事件
                    </ul>
            `,
            data:function(){
                return{
                    list:['html','css','js']
                }
            },
            methods:{
                getIndex(index){
                    console.log({index});
                    this.$emit("toparent",[index,this.list]);//在事件中通过$emit方法传递数据
                }
            }
        }
    
        new Vue({
            el:"#app",
            components:{
                test  //在父组件中注册通过$emit定义的事件
            },
            methods:{
                getson(res){
                    console.log(res)//通过父组件中注册的事件获取到数据
                }
            }
        })
    </script>
</body>

父组件向子组件传值

1.用props属性给组件声明一个自定义属性
2.在父组件中调用子组件,通过上一步声明的自定义属性来传递参数

<body>
    <div class="test">
        <tab :title="titleArr" :list="contList"></tab>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        Vue.component("tab",{
            props:['title','list'],
            template:`
                     <div :style="objhead">
                        <div :style="clearFloat">
                            <div :style="hContent">{{title[0]}}</div>
                            <div :style="hContent">{{title[1]}}</div>
                            <div :style="hContent">{{title[2]}}</div>
                        </div>
                        <ul>
                            <li :style="clearFloat" v-for="val in list" >
                                <div :style="hContent" >{{val.name}}</div>
                                <div :style="hContent"  >{{val.price}}</div>
                                <div :style="hContent" >{{val.num}}</div>
                            </li>
                        </ul>
                    </div>`,
                    
            data:function(){
                return{
                    objhead:{
                        width:'600px',
                        background:"#eee",
                    },
                    hContent:{
                        float:"left",
                        width:"33.33%",
                        lineHeight:"35px",
                        textAlign:"center"
                    },
                    clearFloat:{
                        overflow:"hidden"
                    }
                }
            }
        })
        
        var vmTest = new Vue({
            el:'.test',
            data:{
                titleArr:['商品名','价格','数量'],
                contList:[{
                    name:"青菜",
                    price:12,
                    num:1
                }]
            }
        })
    </script>
</body>

子组件之间传值

            //借助另一个实例化对象发送
            var app = new Vue()
            var test1 = {
                template:"<div @click='tos'>{{msg}}</div>",
                data:function(){
                    return{
                        msg:"我是组件1的数据"
                    }
                },
                //必须通过事件发送,不能用钩子函数
                methods:{
                    tos(){
                        //新的实例化Vue对象
                        app.$emit('tosibling',this.msg);
                    }
                }
            }
            
            var test2 = {
                template:"<div>{{msg}}</div>",
                data:function(){
                    return{
                        msg:"我是组件2的数据"
                    }
                },
                created(){
                    //新的实例化Vue对象
                    app.$on('tosibling',function(res){
                        console.log(res);
                    })
                }
            }
            
            var vm = new Vue({
                el:"#app",
                components:{
                    test1,
                    test2
                }
            })

获取根元素

相关文章

  • 前端基础搬运工-VUE模块

    十、VUE模块 基础部分 1. Vue组件间传值 答: -[ ] 1.父子之间的传值 父组件向子组件传值通过p...

  • vue 6种通信总结①

    常用vue通信大概有这几种方式进行: 组件间的父子之间的传值 组件间的子父之间的传值 非组件间的组件间的传值(简称...

  • Vue和React组件通信的总结

    在现代的三大框架中,其中两个Vue和React框架,组件间传值方式有哪些? 组件间的传值方式 组件的传值场景无外乎...

  • Vue组件间通信

    Vue组件间通信 父子组间通信 通过props向子组件传值,通过事件向父级组件发送消息 通过props向子组件传值...

  • 2020-03月前端面试题

    vue相关 vue父子组件传值方式有哪些? 兄弟组件间如何传值? vuex是用来干什么的? vuex核心模块有哪些...

  • vue 父子组件间的传值

    vue 中为了避免重复的代码,使页面更简洁,经常使用到组件,使用组件会牵扯到组件间的传值 常用的传值有: 父子间的...

  • Vue - 传值

    Vue 传值有两种:1)父组件向子组件传值(属性传值,Prop传值)2)子组件向父组件传值 一、父组件向子组件传值...

  • (VUE3) 四、组件传值(父子组件传值 & 祖孙组件传值 &v

    1.父子组件传值 vue2中的父子组件传值:父组件: 子组件: vue3中的父子组件传值: 还是用props接收父...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • vue组件间传值问题总结

    vue项目中,组件间传值的问题总结: 父传子 父组件 子组件 上面父组件和子组件之间的传值是模拟接口请求数据,然后...

网友评论

      本文标题:vue 组件间传值

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