美文网首页
Vue_父子间组件的数据传递

Vue_父子间组件的数据传递

作者: Christoles | 来源:发表于2019-04-11 23:47 被阅读0次

在下面的例子中,Vue实例对象即为父组件,注册的全局组件为子组件。

一. 父组件向子组件传递数据

1. 方法步骤
  • (1) 用props属性给组件声明一个自定义属性(名称可以自定义 如下例子中的 tit list);
  • (2) 在父组件中调用子组件时,通过上一步声明的自定义属性来传递参数。
2. 实例

实现:将父组件中的数据(titleArr 和 contList)传到子组件的相应位置中
运用:props, 全局组件(可用别法)
过程:父组件数据 --> html自定义属性绑定--> 子组件自定义属性--> 子组件相应位置-->v-for循环入值
html:

<div class="test">
    <!--tit list-->
    <tab :tit="titleArr" :list="contList"></tab>
</div>

javascript:

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
//全局组件
Vue.component("tab",{
    //tit list  --- 自定义属性
    props:["tit","list"],
    template:`<div :style="objhead">
                <div :style="clearFloat" >
                    //tit
                    <div :style="hContent" v-for="val in tit">{{val}}</div>
                </div>
                <ul >
                    //list
                    <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",
                border:"1px solid #666",
            },
            clearFloat:{
                overflow:"hidden"
            }
        }
    }
})
var vmTest = new Vue({
    el:".test",
    data:{
        titleArr:["商品名称","价格","数量"],
        contList:[
            {name:"青菜",price:12,num:4}
        ]
    }
})
</script>

css

*{margin: 0;padding: 0;list-style: none;box-sizing: border-box;}

可以自定义


二. 子组件向父组件传递数据

1. 方法步骤
  • (1) 在子组件中定义一个事件;
  • (2) 在子组件定义的事件中通过$emit方法传递数据(且定义一个事件名称用于html中);
  • (3) 在父组件中注册一个 通过(第三步)$emit定义的事件;
  • (4) 通过父组件中注册的事件获取到数据。
2. 实例

实现:将子组件li的index传递到父组件中
运用:$emit , 局部组件(可用别法)
html:

<div id="app">
    <!--toparent---子组件中通过$emit定义的事件-->
    <test @toparent="getson"></test>
</div>

js

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
//局部组件
var test = {
    template:`
        <div>
            <ul>
                <li @click="getIndex(index) v-for="(val,index) in list">{{val}}</li>
            <ul>
        </div>
    `,
    data:function(){
        return {
            list:["html","css","js"]
        }
    },
    methods:{
        getIndex(index){
            console.log({index});
            //重点***这里的第一个参数即是html里的事件,第二个参数(被传递的即是传递给父组件的数据res)也可以是个数组。
            this.$emit("toparent",[index,this.list]);
        }
    }
}
var vm = new Vue({
    el:"#app",
    components:{
        //实例化局部组件
        test
    },
    methods:{
        getson(res){
            //接受到子组件的数据
            console.log({res})
        }
    }
})
</script>

* 注意坑点:

html中不区别大小写,而javascript区别大小写,为了防止出错,统一小写。
组件模板只能有一个根节点!!!

相关文章

  • Vue中组件间传值总结 ------ 2020-05-17

    父子组件间传递数据的方式 1、父组件向子组件传递数据 2、子组件向父组件传递数据 3、父子组件相互传递同一数据的两...

  • Vue_父子间组件的数据传递

    在下面的例子中,Vue实例对象即为父组件,注册的全局组件为子组件。 一. 父组件向子组件传递数据 1. 方法步骤 ...

  • Vue组件传值及页面缓存问题

    一、父子组件传值 基本概念在Vue中,父子组件间的数据流向可以总结为prop向下传递,事件向上传递,即父组件通过p...

  • VUE组件通信的十种姿势

    父子组件通信 1、父子组件通过prop传递数据 父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数...

  • Vue常见问题

    1. 父子组件间通信 父组件传递数据给子组件(通过props属性来实现) 子组件通过props来接收数据 子组件与...

  • Vue2 组件通信写法总结

    组件通讯包括:父子组件间的通信和兄弟组件间的通信。具体有以下几种情况。 父组件传递数据给子组件 父组件使用 Pro...

  • Vue 的组件之间如何通信

    1.父子组件之间的消息传递 父组件向子组件传递数据是通过prop传递的,子组件传递数据给父组件是通过$emit触发...

  • Vue_子组件间的数据传递

    1. 代码解释: test1 --- 发送数据的子组件test2 --- 接受数据的子组件app --- 实例化对...

  • Vue 2.0 组件间数据传递

    父子组件数据传递 父组件单向传递给子组件 使用v-bind传递 父组件: 子组件: 子组件单向传递给父组件 使用 ...

  • 不同场景下组件的数据通信

    父子组件的数据通信 1.父组件传递数据给子组件(props) 2.子组件传递数据给父组件 (回调函数) {{par...

网友评论

      本文标题:Vue_父子间组件的数据传递

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