• vue组件学习(二)


    父子组件之间的数据传递,

    父传给子: 直接在组件上传,如: (冒号和不要冒号的区别,有冒号会自动转为相应的类型)在名为count的组件,父组件传了number=2的值给子组件
    子组件通过props:['number'] 接收;
    子传给父组件: 通过$emit('change',参数),change可以任意命名,向父组件暴露数据接口
    父组件通过监听"change"然后调用 一个方法获取到的参数和值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>vue组件学习~父子间的数据传递</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="root">
            <coun :number="1" @inc="handleNumber"></coun>
            <coun :number="3" @inc="handleNumber"></coun>
            <div>总计: {{total}}</div>
        </div>
    
        <script>
            var counter = {
                props: ['number'],
                data:function () {
                    return {
                        mynumber: this.number, //单向数据流,子组件不能直接改父组件的数据,保存到子组件变量中修改
                    }
                },
                template: '<div @click="handeClick">{{mynumber}}</div>',
                methods: {
                    handeClick:function () {
                        this.mynumber += 2; // 每次点击加2
                        this.$emit('inc',2);// 把每次改变的数字传出去给父组件
                    }
                }
            }
            var vm = new Vue({
                el: '#root',
                data:{
                    total: 4,//暂时写死,可能用计算属性来计算
                },
                components: {
                    coun: counter
                },
                methods: {
                    handleNumber:function (number) {
                        this.total += number
                    }
                }
            })
        </script>
    
    </body>
    </html>
    



    2, 组件参数校验与非props特性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>vue组件学习~父子间的数据传递</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="root">
            <coun :number="1" @inc="handleNumber"></coun>
            <coun :number="3" @inc="handleNumber"></coun>
            <div>总计: {{total}}</div>
        </div>
    
        <script>
            var counter = {
    //            props: ['number'],
    
                //对父组件传进来的参数进行验证
                props: {
                    // 验证传进来的number为字符串类型
                    number: String
                },
    
                //对父组件传进来的参数进行验证
                props: {
                    // 验证传进来的number为数字类型
                    number: String
                },
                props: {
                    // 验证传进来的number为数字类型和字符串类型
                    number: [Number,String]
                },
                props: {
                    // 验证传进来的number为数字类型和字符串类型
                    number: {
                       type: [Number,String],
                       required: true, // true为必传
                       default: '如果没有传,就用默认值',//默认值
                        validator: function (value) {//自定义校验, value为传进来 的值
                            return (value.length > 5);// 对传进来的参数长度限制
                        }
                    },
    
                },
                // 展示了props的多种用法,使用其中之一就好
    
    
                data:function () {
                    return {
                        mynumber: this.number, //单向数据流,子组件不能直接改父组件的数据,保存到子组件变量中修改
                    }
                },
                template: '<div @click="handeClick">{{mynumber}}</div>',
                methods: {
                    handeClick:function () {
                        this.mynumber += 2; // 每次点击加2
                        this.$emit('inc',2);// 把每次改变的数字传出去给父组件
                    }
                }
            }
            var vm = new Vue({
                el: '#root',
                data:{
                    total: 4,//暂时写死,可能用计算属性来计算
                },
                components: {
                    coun: counter
                },
                methods: {
                    handleNumber:function (number) {
                        this.total += number
                    }
                }
            })
        </script>
    
    </body>
    </html>
    
    

    非props特性,其它就是给dom添加个自定义属性,显示在dom标签中,就是父组件给子组件传值,但子组合没有用props来接收,那就显示在dom中



    给组件绑定事件,要加native 如: <coun :number="1" @click.native="handleNumber">

  • 相关阅读:
    pku3225 区间
    pku2136 Vertical Histogram
    NOI2006 最大获利
    APIO2010 特别行动队
    停电两夜
    偷偷乐一把
    那些花儿...
    一件一块钱的小事
    web service 的Section=ResponseStatusLine 错误和skype
    杂谈
  • 原文地址:https://www.cnblogs.com/ybixian/p/9314212.html
Copyright © 2020-2023  润新知