Vue3——组件基础

news2024/10/6 5:53:03

组件基础


1. 组件定义与使用
1.1 代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>组件基础</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div style="border: 1px solid #949494;padding: 20px;margin-top: 10px;">
    <h2>1. 组件定义与使用</h2>
    <!-- 3. 将组件用标签表示 -->
    <div id="app">
        <abc></abc>
        <p>===============================</p>
        <abc></abc>
    </div>

    <script>
        // 1. 定义组件,与定义数据对象的差别是template选项
        const x = {
            data(){
                return{
                    count: 0
                }
            },
            template: `<button @click='count++'>点击{{count}}次</button>`
        }
        
        const app = Vue.createApp({})
        // 将数据绑定到对象中
        app.component('abc',x)
        app.mount('#app')
    </script>
    </div>
</body>
</html>
1.2 效果图

在这里插入图片描述

在这里插入图片描述

2. 局部组件与全局组件
2.1 代码
    <div style="border: 1px solid #949494;padding: 20px;margin-top: 10px;">
    <h2>2. 局部组件与全局组件</h2>
    <div id="app2">
        <p>(1)组件counter</p>
        <counter></counter>
        <br><br>
        <p>(2)这个组件中调用全局组件counter</p>
        <my-message></my-message>
    </div>

    <script>
        // 注册组件counter
        const counter = {
            data(){
                return{
                    count: 0
                }
            },
            template: `<button @click="count++">您点击了{{count}}次</button>`
        }

        // 注册组件my-message
        const message = {
            data(){
                return{
                    msg: '第二组件'
                }
            },
            // 在这个组件中调用全局组件counter
            template: `<div border=1>{{msg}}<br><counter></counter></div>`
        }

        // 实例化 放在实例对象里面声明的组件为局部组件
        const app2 = Vue.createApp({
            data(){
                return{
                    msg: 'Vue全局组件与局部组件'
                }
            },
            // 放在实例中的components属性中就是局部组件
            components: {
                'my-message': message
            }
        })
        // 放在实例外面并且用component函数注册的组件就是全局组件
        // 全局组件可以在其他的组件中使用
        app2.component('counter',counter)
        app2.mount('#app2')
    </script>
    </div>
2.2 效果图

在这里插入图片描述

在这里插入图片描述

3. 父组件与子组件
3.1 代码
    <div style="border: 1px solid #949494;padding: 20px;margin-top: 10px;">
        <h2>3. 父组件与子组件</h2>
        <div id="app3">
            <my-box></my-box>
        </div>

        <!-- 在A组件里面又嵌套了B组件,A称之为父组件 ,B称之为子组件 -->
        <script>
            const counter3 = {
                data(){
                    return{
                        x: 0
                    }
                },
                template: `<button @click='x++'>单击{{x}}次</button>`
            }

            const box = {
                template: `
                <div style="height: 300px;width: 300px;background: wheat;text-align: center;">
                <counter3></counter3>
                </div>
                `,
                // 将组件counter设置为box组件的子组件
                components: {
                    counter3: counter3
                }
            }

            const app3 = Vue.createApp({})
            app3.component('my-box',box)
            app3.mount('#app3')
        </script>
    </div>

3.2 效果图

在这里插入图片描述

在这里插入图片描述

4. 父组件传值给子组件(props属性的使用)
4.1 代码
    <div style="border: 1px solid #949494;padding: 20px;margin-top: 10px;">
        <h2> 4. 父组件传值给子组件(props属性的使用)</h2>
        <div id="app4">
            <!-- 3.属性传值,父组件传值给子组件 -->
            <my-box4 :name="name" :colleges="colleges"></my-box4>
        </div>

        <script>
            const mybox4 = {
                //1.通过props来接收父组件传值
                props: ['name', 'colleges'],
                template: `
                <div>
                    <p>{{name}}</p>
                    <ul>
                        <li v-for="item in colleges">{{item}}</li>
                    </ul>
                </div>
                `
                }

                const app4 = Vue.createApp({
                    // 2.在父组件中设置值
                    data() {
                        return {
                            name: '王五',
                            colleges: ['语文', '数学', '英语', '化学']
                        }
                    },
                    components: {
                    "my-box4": mybox4
                    }
                })
                app4.mount('#app4')
        </script>
    </div>
4.2 效果图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5. 事件发射: 子组件传值给父组件
5.1 代码
    <div style="border: 1px solid #949494;padding: 20px;margin-top: 10px;">
        <h2>5. 事件发射: 子组件传值给父组件</h2>
        <template id="box5">
            <div style="background-color: antiquewhite;width: 200px;height: 200px;">
                <button @click="myfun">点击</button>
              </div>
        </template>

        <div id="app5" style="background-color: rgb(224, 215, 250);width: 300px;height: 300px;padding: 20px;">
            <!-- 4.子组件标签中捆绑事件 -->
            <my-box5 @box-click="boxclick"></my-box5>
        </div>

        <script>
            const mybox5 = {
                template: `#box5`,
                methods: {
                    // 1.子组件定义事件
                    myfun(){
                        const dataobj = {
                            name: '李四',
                            info: 'my name is lisi'
                        }
                        // 2.在子组件中通过$emit方法定义事件发射,第一个参数为事件名,第二参数为数据
                        this.$emit('box-click',dataobj)
                    }
                }
            }

            Vue.createApp({
                //  3.父组件中定义接收事件发射的方法
                methods: {
                    boxclick(data){
                        console.log(data)
                    }
                },
                components: {
                    "my-box5": mybox5
                }
            }).mount('#app5')
        </script>
    </div>
5.2 效果图

在这里插入图片描述
点击后
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣-LCP 02.分式化简

题解&#xff1a; class Solution:def fraction(self, cont: List[int]) -> List[int]:# 初始化分子和分母为 0 和 1n, m 0, 1# 从最后一个元素开始遍历 cont 列表for a in cont[::-1]:# 更新分子和分母&#xff0c;分别为 m 和 (m * a n)n, m m, (m * a n)# 返回最终的…

程序员如何应对久坐带来的不良影响

久坐是程序员工作中常见的问题&#xff0c;它可能对身体健康产生多种负面影响。为了应对这些影响&#xff0c;程序员可以采取以下措施&#xff1a; 定时休息&#xff1a;每隔45分钟至1小时&#xff0c;起身活动5-10分钟。这可以帮助缓解长时间坐姿带来的身体压力&#xff0c;促…

YOLOv9改进策略 | 添加注意力篇 | 挤压和激励单元SENetV2助力YOLOv9细节涨点(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是SENetV2&#xff0c;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何一个模型相结合的模块(可以看作是一种通道型的注意力机制但是相对于SENetV1来说…

Aws Nat Gateway

要点 NAT网关要能访问外网&#xff0c;所以需要部署在有互联网网关的Public子网中。 关键&#xff1a; NAT网关创建是选择子网&#xff0c;一定要选择公有子网&#xff08;有互联网网关子网&#xff09; 特别注意&#xff1a; 新建nat网关的时候&#xff0c;选择的子网一定…

Ubuntu无法安装向日癸15.2.0.63062_amd64.deb最新版

Ubuntu安装向日葵远程控制 安装包下载 安装方式 方式一&#xff1a;运行安装包安装 方式二&#xff1a;终端命令安装 通过以下教程可以快速的安装向日葵远程控制&#xff0c;本教程适用于Ubuntu18.04/20.04/22.04 安装包下载 进入向日葵远程控制下载官网下载向日葵远程控制Lin…

使用Python+opencv实现自动扫雷

大家好&#xff0c;相信许多人很早就知道有扫雷这么一款经典的游戏&#xff0c;更是有不少人曾听说过中国雷圣&#xff0c;也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏&#xff0c;从过去到现在依然都有着它独特的…

Spark-机器学习(3)回归学习之线性回归

在之前的文章中&#xff0c;我们了解我们的机器学习&#xff0c;了解我们spark机器学习中的特征提取和我们的tf-idf&#xff0c;word2vec算法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你…

安居水站:水站经营秘籍:年入30万不是梦。水站创业指南。

在这个快节奏的社会里&#xff0c;初创企业家们总是在寻找一条明路&#xff0c;以在竞争激烈的市场中立足。为了帮助他们更好地实现这一目标&#xff0c;我根据经验决定制定一份水站经营指导手册。这份手册将详细阐述如何从零起步&#xff0c;如何运营&#xff0c;如何进行市场…

开源博客项目Blog .NET Core源码学习(16:App.Hosting项目结构分析-4)

本文学习并分析App.Hosting项目中前台页面的文章专栏页面和文章详情页面。< 文章专栏页面 文章专栏页面总体上为左右布局&#xff0c;左侧显示文章列表&#xff0c;右侧从上向下为关键词搜索、分类导航、热门文章等内容。整个页面使用了layui中的面包屑导航、表单、模版、流…

【C++初阶】List使用特性及其模拟实现

1. list的介绍及使用 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前…

利用OpenCV4.9制作自己的线性滤波器!

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9使用 inRange 的阈值操作 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 f…

Android JetPack Compose+Room----实现搜索记录功能

文章目录 需求概述功能展示实现搜索功能使用的技术1.Android Jetpack room2.Android JetPack Compose 代码实现编写搜索界面接入Room实现搜索功能的管理引入依赖定义包结构定义操作表的Dao类定义数据库的基础配置定义数据库的Dao管理类使用数据库升级 源码地址 需求概述 搜索功…

java:Java中的抽象类

什么是抽象类&#xff1a; 我们知道&#xff0c;类用来模拟现实的事物&#xff0c;一个类模拟一类事物&#xff0c;某个类的一个实例化对象可以模拟某个属于该类的具体事物。类中描绘了该类所有对象的共同的特性&#xff0c;当一个类中给出的信息足够全面时候&#xff0c;我们就…

算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结

目录 一、Leetcode189轮转数组题目描述解题思路方法:切片总结 二、Leetcode56合并区间题目描述解题思路方法:总结 三、Leetcode21合并两个有序链表题目描述解题思路方法:总结 四、Leetcode2两数相加题目描述解题思路方法:总结 sql总结: 一、Leetcode189轮转数组 题目描述 给定…

【GIS教程】ArcGIS做日照分析(附练习数据下载)

我国对住宅日照标准的规定是:冬至日住宅底层日照不少于1小时或大寒日住宅层日照不少于2小时(通常以当地冬至日正午12时的太阳高度角作为依据)。因冬至日太阳高度角最低&#xff0c;照射范围最小&#xff0c;如果冬至日12&#xff1a;00建筑物底层能够接收到阳光&#xff0c;那么…

Go语言中通过数据对齐降低内存消耗和提升性能

数据对齐是一种安排数据分配方式以加速 CPU 访问内存的方法。 不了解这个概念会导致额外的内存消耗甚至性能下降。 要了解数据对齐的工作原理&#xff0c;让我们首先讨论没有它会发生什么。假设我们分配两个变量&#xff0c;一个 int32 类型的 &#xff08;32 B&#xff09; 和…

OJ:数字三角形(搜索)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f337;1.问题描述&#xff1a; ⛳️题目描述&#xff1a; 示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路…

指针的使用以及运算、二级指针、造成野指针的原因以及解决方法、指针和数组相互使用

第七章&#xff0c;指针的学习 目录 前言 一、指针的概念 二、指针的类型 三、野指针 四、指针的运算 五、指针和数组的关系以及使用 六、指针数组 七、二级指针 总结 前言 这章主要学习的是指针方面的知识&#xff0c;这节只是简单了解一下指针&#xff0c;并不会深…

使用HTML和CSS和PHP实现一个简单的简历制作项目

实 验 目 的 掌握HTML表单作用&#xff0c;以及action和method属性&#xff1b; 掌握HTML输入域作用、类型、标签&#xff0c;以及name和value属性&#xff1b; 掌握$_REQUEST变量的作用、语法和使用&#xff1b; 掌握注释&#xff0c;以及变量的作用、命名、赋值和输出&#…

SpringBoot项目错误:找不到主类(解决办法)

清理和重新编译项目即可&#xff0c;在项目中点击右键Maven-Reload project&#xff0c;之后再重新运行就行了