zoukankan      html  css  js  c++  java
  • 前端-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
                }
            }
        })
  • 相关阅读:
    iOS沙盒机制
    iOS网络图片缓存SDWebImage
    iOS缓存到sandbox
    iOS缓存到内存
    网络语音技术
    iOS的影片播放 MediaPlayer 和 AVPlayer
    IOS上MediaPlayer framework实现视频播放
    线程间通信共享变量和queue
    如何进行多线程编程
    python的并发GIL 了解
  • 原文地址:https://www.cnblogs.com/cjxxl1213/p/13347406.html
Copyright © 2011-2022 走看看