《Vue学习笔记》-组件-父子组件传值的方式及相关细节

 

目录

《Vue学习笔记》-组件-父子组件传值的方式及相关细节

1.父组件向子组件传值的方式

2.组件-父组件把方法传递给子组件-1

3.组件-父组件把方法传递给子组件-2(增加子组件向父组件传值)


《Vue学习笔记》-组件-父子组件传值的方式及相关细节

1.父组件向子组件传值的方式

<!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>title</title>
    <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>


    <div id="app">
        <!--父组件,可以在引用子组件的时候,通过 属性绑定(v-bind)的形式,把 需要传递给 子组件的数据,
        以属性绑定的形式,传递到子组件内部,供子组件使用-->
        <!-- 注意:绑定的关键字(如:parentMsg)采用驼峰命名,在子组件内部使用关键字时,必须采用小写 -->
        <com1 v-bind:parentmsg="msg"></com1>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                msg: '父组件中的数据'
            },
            methods: {},
            components: {
                //结论:经过尝试,发现,子组件中,默认无法访问到 父组件中的 data上的数据 和 methods中的方法
                com1: {
                    data() {
                        /*
                        注意:1.子组件中的data数据,并不是通过 父组件 传递过来的,而是子组件自身私有的,
                              比如:子组件通过Ajax,请求回来的数据,都可以放在data身上
                              --data上的数据都是 可读 可写的
                              2.组件中 所有 props 中的数据都是通过 父组件 进行传递的,不属于自己的,只是需要用到外部数据,进行验证
                              --props的数据只可以读,不可以写(如果写,会警告)
                        */
                        return {
                            title: 'title',
                            content: 'content'
                        }
                    },
                    template: '<h1>子组件中的数据--{{parentmsg}}</h1>',
                    //把父组件传递过来的parentMsg属性,先在props数组中,定义一下(可以认为,经过 子组件内部 认证后),这样,才能使用这个数据
                    //注意: 组件中 所有的 props 中的数据,都是通过 父组件 传递给 子组件 的
                    //注意:如果 绑定关键字 采用 驼峰命名法,需要在子组件中全部采用小写,否则容易出错,其他直接复制 绑定的关键字 即可
                    props: ['parentmsg']
                }
            }
        })
    </script>


</body>

</html>

2.组件-父组件把方法传递给子组件-1

<!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>title</title>
    <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
    <div id="app">
        <!-- 
            父组件向子组件 传递 方法,使用的是 事件绑定机制,v-on;
            当我们自定义了一个事件属性之后,那么,子组件 就能够通过某些方式,来调用传递进去的 这个方法了   
        -->
        <!--注意:func 这个名称自己写就OK,只要 show 符合就行,但是不从这里 传参 ,从子组件的 $emit 方法进行 传参-->
        <com1 @func="show"></com1>
    </div>

    <template id='temp1'>
    <div>
        <h1>这是 子组件</h1>
        <input type="button" value="点击按钮,触发子组件调用父组件方法-func" @click="myclick">
    </div>
</template>
    <script>
        //定义一个字面量类型的 组件模板对象
        var com1 = {
            template: '#temp1',
            methods: {
                myclick() {
                    console.log('触发子组件myclick方法')
                        //当点击子组件的按钮时候,通过 $emit方法 拿到并调用 父组件 传递过来的 func 方法,并调用这个方法
                        //在 $emit 进行传参
                    this.$emit('func', 123, 123) //emit 意为:触发,调用,发射的意思

                }
            }
        }
        var vm = new Vue({
            el: '#app',
            data: {},
            methods: {
                //show 方法 还可以传参show(data1,data2...)
                show(data1, data2) {
                    console.log('调用父组件的 show 方法' + data1 + data2)
                }
            },
            components: {
                com1 //该写法,相当于 com2: com2
            }
        })
    </script>


</body>

</html>

3.组件-父组件把方法传递给子组件-2(增加子组件向父组件传值)

<!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>title</title>
    <script src="./lib/vue-2.4.0.js"></script>
</head>

<body>
    <div id="app">
        <!-- 
            父组件向子组件 传递 方法,使用的是 事件绑定机制,v-on;
            当我们自定义了一个事件属性之后,那么,子组件 就能够通过某些方式,来调用传递进去的 这个方法了   
        -->
        <!--注意:func 这个名称自己写就OK,只要 show 符合就行,但是不从这里 传参 ,从子组件的 $emit 方法进行 传参-->
        <com1 @func="show"></com1>
    </div>

    <template id='temp1'>
    <div>
        <h1>这是 子组件</h1>
        <input type="button" value="点击按钮,触发子组件调用父组件方法-func" @click="myclick">
    </div>
</template>
    <script>
        //定义一个字面量类型的 组件模板对象
        var com1 = {
            template: '#temp1',
            //新:定义数据对象
            data() {
                return {
                    sondata: {
                        name: '大头儿子',
                        age: 6
                    }
                }
            },
            methods: {
                myclick() {
                    console.log('触发子组件myclick方法')
                        //当点击子组件的按钮时候,通过 $emit方法 拿到并调用 父组件 传递过来的 func 方法,并调用这个方法
                        //在 $emit 进行传参,注意是this.sondata,因为是使用自己的数据,this. 表明当前对象
                    this.$emit('func', this.sondata) //emit 意为:触发,调用,发射的意思

                }
            }
        }
        var vm = new Vue({
            el: '#app',
            data: {
                dataFromSon: null

            },
            methods: {
                //show 方法 还可以传参show(data1,data2...)
                // show(data1, data2) {
                //   console.log('调用父组件的 show 方法' + data1 + data2)}
                show(data) {
                    //console.log('调用父组件的 show 方法(尝试向父组件data对象)+' + data)
                    console.log(data)
                        //子组件向父组件传值,在该方法被调用的时候,同时将数据写入父组件的数据中
                    this.dataFromSon = data
                }
            },
            components: {
                com1 //该写法,相当于 com2: com2
            }
        })
    </script>


</body>

</html>

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值