前端-Vue基础3(父子组件交互)

1、子组件往父组件传值

点击子组件的值,子组件自增,父组件的值也跟着自增

通过:this.$emit('change')方法向父组件暴露事件,在子组件中引用,可以调用父组件的方法

点击子组件触发click事件,调用子组件的add方法

子组件的add方法触发了父组件的事件,调用了父组件的changeAdd方法

<body>
<div id="app">
<!--    调用父组件的方法-->
    <number @change="countAdd"></number>
    <number @change="countAdd"></number>
    <div>父组件--<span>{{count}}</span></div>

</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('number',{
        template:'<div>子组件--<span @click="add">{{num}}</span></div>',
        data:function () {
            return{
                num:0
            }
        },
        methods:{
            add:function () {
                this.num++
                this.$emit('change'.this.num)//向父组件触发事件
            }
        }
    })

    new Vue({
        el:'#app',
        data:{
            count:0
        },
        methods:{
            countAdd:function (num) {
                this.count++
                console.log(num)
            }
        }
    })
</script>
</body>

2、父组件向子组件单向传值

父组件向子组件传值,存在单向数据流

父组件可以随意向子组件传值,但是子组件不能随意修改父组件的值,因为子组件修改了父组件的值,其他同级的子组件的值也会跟着改变

<body>
<div id="app">
<!--    调用父组件的方法-->
    <number :num2="number2" num3="10"></number>
    <number :num2="number2" num3="10"></number>

</div>
<script src="js/vue.js"></script>
<script>
    Vue.component('number',{
        //父组件向子组件传值,存在单向数据流
        //父组件向子组件可以随意传值
        //但是子组件不能随意修改父组件的值,因为子组件修改了父组件的值,其他同级的子组件的值也会跟着改变
        props:['num2','num3'],
        template:'<div>子组件--<span @click="change">{{count}}</span></div>',
        data:function () {
            return{
                count:this.num2
            }
        },
        methods:{
            change:function () {
                this.count = 100
            }
        }
    })

    new Vue({
        el:'#app',
        data:{
            number2:99
        }
    })
</script>
</body>

2.1 props

props可以是数组

Vue.component('number',{
        //父组件向子组件传值,存在单向数据流
        //父组件向子组件可以随意传值
        //但是子组件不能随意修改父组件的值,因为子组件修改了父组件的值,其他同级的子组件的值也会跟着改变
        props:[num2,num3],
        template:'<div>子组件--<span @click="change">{{count}}</span></div>',
        data:function () {
            return{
                count:this.num2
            }
        },
        methods:{
            change:function () {
                this.count = 100
            }
        }
    })

也可以是字典

Vue.component('number',{
        //父组件向子组件传值,存在单向数据流
        //父组件向子组件可以随意传值
        //但是子组件不能随意修改父组件的值,因为子组件修改了父组件的值,其他同级的子组件的值也会跟着改变
        props:{
            'num2':{
                type:[Number,String],//数据类型
                default:200,//默认值
                required:true//不能和default连用
            }
        },
        template:'<div>子组件--<span @click="change">{{count}}</span></div>',
        data:function () {
            return{
                count:this.num2
            }
        },
        methods:{
            change:function () {
                this.count = 100
            }
        }
    })
原文地址:https://www.cnblogs.com/cjxxl1213/p/13347406.html