Vue3——组件基础

组件基础


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 效果图

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iZotope RX 10 音频修复和增强工具 mac/win

iZotope RX 10 for Mac是一款出色的音频修复和增强工具&#xff0c;凭借其卓越的音频处理技术&#xff0c;能够轻松应对各种音频问题。 无论是背景噪音、回声还是失真&#xff0c;RX 10都能精准去除&#xff0c;还原清晰纯净的音频。同时&#xff0c;它还提供了丰富的增强工具&…

小红书电商运营实战课,从0打造全程实操(65节视频课)

课程内容&#xff1a; 1.小红书的电商介绍 .mp4 2.小红书的开店流程,mp4 3.小红书店铺基础设置介绍 ,mp4 4.小红书店铺产品上架流程 .mp4 5.客服的聊天过程和子账号建立 .mp4 6.店铺营销工具使用和后台活动参加 .mp4 7.小红书产品上架以及拍单教程,mp4 8.小红书如何选品…

第15届蓝桥杯题解

A题 结果&#xff1a;2429042904288 思路很简单 前20个数分别是 20 24 40 48 60 72 80 96 100 120 140 144 160 168 180 192 200 216 220 240 第2 4 6 8 12 ...n个数分别是24的 1倍 2倍 3倍 4倍 6倍 n/2倍 所以第202420242024 个数就是 24的 101210121012倍 B题 答案&am…

在PostgreSQL中如何实现递归查询,例如使用WITH RECURSIVE构建层次结构数据?

文章目录 解决方案使用WITH RECURSIVE进行递归查询示例代码 总结 在PostgreSQL中&#xff0c;递归查询是一种非常强大的工具&#xff0c;它可以用来查询具有层次结构或树形结构的数据。例如&#xff0c;你可能会在员工-经理关系、目录结构或组织结构图中遇到这样的数据。为了处…

嵌入式物联网实战开发笔记-乐鑫ESP32开发环境ESP-IDF搭建【doc.yotill.com】

乐鑫ESP32入门到精通项目开发参考百例下载&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;4e33 3.1 ESP-IDF 简介 ESP-IDF&#xff08;Espressif IoT Development Framework&#xff09;是乐鑫&#xff08;Espressif Systems&#xff09;为 ESP 系列…

跨站攻击CSRF实验

1.low等级 先利用Burp抓包 将get响应的url地址复制&#xff0c;发到网页上&#xff08;Low等级到这完成&#xff09; Medium&#xff1a; 再将抓到的包发到Repeater上,对请求中的Referer进行修改&#xff0c;修改成和url一样的地址&#xff0c;修改成功。 在这里修改后发送 然…

Java中的四种引用类型

6.Java中的引用类型 1.强引用 一个对象A被局部变量、静态变量引用了就产生了强引用。因为局部变量、静态变量都是被GC Root对象关联上的&#xff0c;所以被引用的对象A&#xff0c;就在GC Root的引用链上了。只要这一层关系存在&#xff0c;对象A就不会被垃圾回收器回收。所以只…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

Axure RP 9中文激活版:专业原型设计工具mac/win

Axure RP 9是一款由美国Axure Software Solution公司开发的专业原型设计工具。它凭借强大的交互功能和丰富的设计素材&#xff0c;为产品经理、UI设计师、交互设计师等用户提供了高效、便捷的原型设计体验。 Axure RP 9支持快速创建线框图、流程图、原型和规格说明文档&#xf…

Python可视化数据分析-饼状图

一、前言 饼状图&#xff08;Pie Chart&#xff09;是一种常用的数据可视化图表&#xff0c;用于展示数据中各部分的占比关系。Python 中有多种库可以用于绘制饼状图&#xff0c;比较常用的包括 matplotlib、pyecharts和 plotly 等。 二、使用 matplotlib 绘制饼状图 import…

【Java并发知识总结 | 第八篇】Java并发线程知识总结

文章目录 8.Java线程知识总结8.1线程定义8.2Java中创建线程的三种方式8.2.1继承Thread类8.2.2实现Runnable接口8.2.3实现Callable接口&#xff08;与线程池搭配使用&#xff09;8.2.4小结 8.3线程的六种状态8.4sleep()和wait()的区别8.5线程上下文切换8.6线程之间的通信方式8.6…

【正则表达式】正则表达式基本语法元素

目录 字符类量词边界匹配逻辑和分组转义和特殊字符验证正则表达式是否能够成功提取数据 字符类 .&#xff1a;匹配除换行符之外的任何单个字符。 [abc]&#xff1a;匹配方括号内的任何字符。 [^abc]&#xff1a;匹配不在方括号内的任何字符。 [a-z]&#xff1a;匹配任何小写字…

51单片机入门_江协科技_31~32_OB记录的自学笔记_LCD1602液晶显示屏

31. LCD1602 31.1. LCD1602介绍 •LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符 •显示容量&#xff1a;162个字符&#xff0c…

使用Redis实现全局唯一ID

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 在分布式系统中&am…

插入排序动态展示3(Python可视化源代码)

修改了“开始”命令按钮&#xff0c;每次单击“开始”&#xff0c;都重新排序。 Python代码 import tkinter as tk import random import timeclass InsertionSortVisualizer:def __init__(self, root, canvas_width800, canvas_height400, num_bars10):self.root rootself.…

【软考中级】21 真题整理

选择题 1、在CPU中&#xff0c;用&#xff08; &#xff09;给出将要执行的下一条指令在内存中的地址。 (A) 程序计数器 (B) 指令寄存器 (C) 主存地址寄存器 (D) 状态条件寄存器 试题答案&#xff1a;A 试题解析&#xff1a; A 选项程序计数器PC&#xff1a;存储下一条要执行指…

C++ 深入理解 继承

本篇文章将谈谈一下几个问题&#xff1a; 1.基类和派生类对象赋值转换 2.继承中的作用域 3.派生类的默认成员函数 4.复杂的菱形继承及菱形虚拟继承 5.其他 1.基类和派生类对象赋值转换 1.派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用。这里有个形象的说法叫切…

一文学会 ts 构建工具 —— tsup

文章目录 能打包什么&#xff1f;安装用法自定义配置文件条件配置在 package.json 中配置多入口打包生成类型声明文件sourcemap生成格式自定义输出文件代码分割产物目标环境支持 es5编译的环境变量对开发命令行工具友好监听模式 watch提供成功构建的钩子 onSuccess压缩产物 min…

每日一题:计数质数

给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1a;0示例 3&#…

Vue 指令、计算属性、侦听器

目录 指令 指令修饰符 按键修饰符 ​编辑 v-model修饰符 事件修饰符 v-bind对于样式操作的增强 操作class 对象 数组 操作style v-model应用于其他表单元素 computed计算属性 概念 基础语法 ​编辑 计算属性vs方法 computed计算属性 作用 语法 缓存特性 m…