【学习笔记03】vue的组件

news2024/11/19 20:20:03

目录

    • 一、组件
    • 二、组件的分类
      • (一)全局组件
      • (二)局部组件
        • 1、为什么vue组件 data函数返回一个对象
        • 2、bootstrap的使用
    • 三、父组件传值给子组件
        • 1、父传子实现进度条
        • 2、 props的属性
    • 四、子组件传值给父组件
    • 五、兄弟组件传值


一、组件

  • 可以复用的页面的一部分

学习的前提是导入文件

链接:https://pan.baidu.com/s/1nJyLYYKt4c4QLfeuQrUGOg 提取码:1115

    <script src="../../vue.global.js"> </script>

二、组件的分类

  • 一个 Vue 组件在使用前需要先被“注册”,这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册

(一)全局组件

  • 使用 Vue 应用实例的app.component() 方法,让组件在当前 Vue 应用中全局可用
  • 定义一个全局组件,组件必须提供模板(component),提供组件的内容

在这里插入图片描述

在这里插入图片描述

  • template的优先级比mount挂载元素高

在这里插入图片描述

在这里插入图片描述

(二)局部组件

  • 定义一个局部注册的组件, 必须提供模板内容
  • 必须注册组件
	console.log(Vue);

在这里插入图片描述
在这里插入图片描述

1、为什么vue组件 data函数返回一个对象

  • 每个实例可以拥有一个独立数据对象,在其中一个实例上数据改变了,其他实例数据不收影响
    <div id="box">
        <Counter></Counter>
        <Counter></Counter>
        <Counter></Counter>
        <Counter></Counter>
    </div>
    <script>
        console.log(Vue);
        let obj = {
            n: 1
        }
        let Counter = {
            template: `<div>计数器 {{n}} <button @click="add">+</button></div>`,

            data() {
                return {
                    n: 1 //计数器的初始值
                }
            },
            methods: {
                add() { //点击计数器每次加 1
                    this.n++;
                }
            }
        }
        Vue.createApp({
            components: {
                Counter
            },
            data() {
                return {
                }
            },
        }).mount("#box")
    </script>

在这里插入图片描述

2、bootstrap的使用

  • 官网:https://www.bootcss.com/

在这里插入图片描述

  • 进度条的实现

在这里插入图片描述

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css">
    <div id="box">
       <Custom-progress></Custom-progress>
       <Custom-progress></Custom-progress>
       <Custom-progress></Custom-progress>
       <Custom-progress></Custom-progress>
    </div>
    <script>
        let CustomProgress={  //定义一个进度条组件(局部)
            template:`<div class="progress">
                            <div class="progress-bar" style="width:30%">30%</div>
                      </div>`
        }  
        Vue.createApp({
            components:{
                CustomProgress
            },
            data() {
                return {
                }
            },
        }).mount("#box")
    </script>

在这里插入图片描述

三、父组件传值给子组件

  • 父组件是通过自定义属性把值传给子组件
  • 传值的时候, 如果不绑定传过去的都是字符串绑定了可以识别各种类型和变量
  • 子组件通过props属性进行接收
  • 父组件传给子组件的值不能改
    <div id="box">
        <!-- 父组件是通过自定义属性把值传给子组件 -->
        <!-- 传值的时候 如果不绑定传过去的都是字符串,绑定了可以识别各种类型和变量 -->
        <Child v-bind:n="666" :v="v" :arr="arr" :obj="obj"></Child>
    </div>
    <script>
        //父组件传值给子组件
        let Child = {
            //子组件通过props属性进行接收
            //props:["n","v"],    方法一

            // 方法二 
            props: {
                n: {
                    type: Number
                },
                v: String,
                arr: Array,
                obj: Object

            },
            //父组件传给子组件的值不能改
            template: `
            <div>
                {{n}} {{typeof n}} <br>
                {{v}} <br>
                {{arr}}<button @click="arr[0]=123">change</button> <br>
                {{obj}}<button @click="obj.a=1111">change</button> <br>
            </div>`
        }
        Vue.createApp({
            components: {
                Child
            },
            data() {
                return {
                    v: 'hello',
                    arr: [1, 2, 3],
                    obj: { a: 1, b: 2, c: 3 }
                }
            },
        }).mount("#box")
    </script>

在这里插入图片描述

1、父传子实现进度条

    <style>
        .progress {
            margin: 30px;
        }
    </style>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css">
    <div id="box">
        <Custom-progress v-for="value in obj" :n="value">
        </Custom-progress>
    </div>
    <script>
        //定义一个进度条组件(局部)
        let CustomProgress = {
            //接收父组件传过来的进度  
            props: ["n"],
            template: `
            <div class="progress">
                <div class="progress-bar" :style="{width:n+'%'}" >{{n}}%</div>
            </div>`
        }
        Vue.createApp({
            components: {
                CustomProgress
            },
            data() {
                return {
                    obj: {
                        one: 50,   //进度条的进度
                        two: 40,
                        three: 80,
                        four: 20
                    }
                }
            },
        }).mount("#box")
    </script>

在这里插入图片描述

2、 props的属性

  • type:Number (类型)
  • required:true (必须传递这个参数)
  • default:100 (默认值)
  • validator(value){ return value>=0 && value<=750 } (自定义验证规则)

四、子组件传值给父组件

1.监听
2.触发事件, 发送数据
3.接收, 就是子组件传过来的值

    <div id="box">
        <!-- 子组件把值传给父组件 1.监听 -->
        <Child :n="n" @msg="receive($event)"></Child>
    </div>
    <script>
        let Child = {
            props: ["n"],
            template: `<div>child component {{n}} <button @click="change">+</button></div>`,
            methods: {
                change() {
                    // this.n++; //error 因为父组件传过来的值不能改
                    //  思路:把接受过来的值+1 传给父组件,在父组件把值改掉,子组件的值自动就更新了
                    //n++  n+1
                    //2.触发事件 发送数据
                    this.$emit("msg", this.n + 1)  //子组件把值传给父组件
                }
            }
        }
        Vue.createApp({
            components: {
                Child
            },
            data() {
                return {
                    n: 666
                }
            },
            methods: {
                receive(e) {  //e 3.接收 就是子组件传过来的值
                    console.log(e);
                    this.n=e;
                }
            }

        }).mount("#box")
    </script>

在这里插入图片描述

  • 子传父实现todolist添加功能
    <div id="box">
        <Txt @msg="add"></Txt>
        <List :arr="arr"></List>
    </div>
        let Txt = {
            template: `<input type='text' v-model="str" @keyup.enter="send" />`,
            data() {
                return {
                    str: ''
                }
            },
            methods: {
                send() {
                    //把值发给父组件
                    this.$emit("msg", this.str);
                    //清空文本框
                    this.str = ""
                }
            }
        }
        let List = {
            props: ["arr"],
            template: `<div>
                        <ul>
                            <li v-for="(item,index) in arr" :key="index">
                                {{item}}    
                            </li>
                        </ul>
                      </div>`
        }
        Vue.createApp({
            components: {
                Txt, List
            },
            data() {
                return {
                    arr: ["aa", "bb", "cc"]
                }
            },
            methods: {
                add(e) {  //e 就是子组件文本框的数据
                    this.arr.push(e);
                }
            }

        }).mount("#box")
    </script>

在这里插入图片描述

五、兄弟组件传值

  • mitt实现兄弟组件传值
  • 官网:https://www.npmjs.com/package/mitt
    在这里插入图片描述在这里插入图片描述
 <script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script>
    <div id="box">
        <Child :n="n"></Child>
        <Com2></Com2>
    </div>
    <script>
        //mitt 实现兄弟组件传值
        let emitter = mitt();
        console.log(emitter);
        let Com2 = {
            template: `<div>com2 {{str}}</div>`,
            //这个函数会自动调用 实例完成所有状态相关的处理之后会自动调用 
            created() {
                //接受兄弟传过来的值
                emitter.on("msg", (e) => {
                    console.log(e)
                    this.str = e;
                })
            },
            data() {
                return {
                    str: ''
                }
            }

        }
        let Child = {
            props: {
                n: {
                    type: Number,   //类型
                    validator(value) {  //自定义验证规则
                        return value >= 0 && value <= 750
                    }
                }
            },
            template: `
            <div>hello child {{n}}
                button @click="send">发送abc到com2</button>
            </div>`,
            methods: {
                send() {
                    emitter.emit("msg", "abc")
                }
            }
        }
        Vue.createApp({
            components: {
                Child, Com2
            },
            data() {
                return {
                    n: 666
                }
            },
        }).mount("#box")
    </script>

在这里插入图片描述

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

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

相关文章

【Javassist】快速入门系列04 使用Javassist更改整个方法体

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 文章目录系列文章目录前言引入Javassist jar包使用Javassist更改整个方法体总结说明前言 上一章我们介绍了使用Javas…

2022全年度白酒十大热门品牌销量榜单

白酒为中国特有的一种蒸馏酒&#xff0c;是世界六大蒸馏酒之一&#xff0c;中国是全球最大的蒸馏酒市场&#xff0c;中国的白酒消费也位列世界烈酒行业领先地位。近几年来&#xff0c;由于市场需求的不断提升及居民的消费升级&#xff0c;高档白酒价格也不断增长&#xff0c;从…

会员管理系统可行性研究

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.可行性研究前提 2.1要求 2.2目标 2.3条件、假定和限制 2.4决定可行性的因素 3.现有小程序分析 3.1经…

进程-计算机是如何工作的

文章目录冯诺依曼计算机体系组成寄存器和内存编译型语言vs解释型语言进程进程管理进程的状态虚拟地址空间虚拟内存冯诺依曼计算机体系 组成 (1) 输入设备:键盘&#xff0c;鼠标 (2) 输出设备:显示器&#xff0c;打印机 其中硬盘(可做输入、输出) (3) 存储器:内存 (4) CPU 运…

Composing Programs(SICP python版) chap1 笔记

《Composing Programs》(SICP python版) chap1 笔记 持续更新中 在学习 CS61A 2022fall的时候配着看的 文章目录《Composing Programs》(SICP python版) chap1 笔记Chapter 1: Building Abstractions with Functions1.1 Getting Started1.1.1 Programming in Python1.1.2 Insta…

python安装face_recognition

本人使用系统为windows10,python的版本是3.8&#xff0c;在安装face_recognition之前需要安装以下内容&#xff1a; 1.cmake 2.dlib&#xff0c;dlib的安装依赖于cmake 1 安装CMake 1.1 官网下载&#xff1a;CMake 1.2 开始安装CMake: 1.3 验证是否安装成功&#xff1a; 打开…

10 Mysql中各种锁

概述 MySQL中的也存在一些类型的锁&#xff0c;用来保证多个连接同时操作数据时的安全即数据的一致性问题&#xff1b;同时&#xff0c;虽然锁能够解决一些数据的一致性和有效性&#xff0c;但是我们还是要选择合适的锁来降低锁对于并发问题的影响 1. 全局锁 全局锁就是对整…

傻白探索Chiplet,互连技术研究现状(七)

目录 一、串行互连 二、并行互连 三、串行与并行互连的比较 四、互连标准接口 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;UCIe Chiplet的可行性常常受到片间互连的性能、可用性以及功耗和成本问题的限制&#xff0c;各种异构芯片的互连接口和标准的设计在技…

Web3中文|恐惧vs伦理:AI艺术评论家错在哪里?

本周&#xff0c;人工智能引发众怒。随着“AI艺术”在网络的流行&#xff0c;一群艺术家正在知名艺术家平台Art Station上掀起一场反AI艺术的抗议活动&#xff0c;而人工智能技术的拥趸者也及时回击了这波反对热潮。 这种充斥着反对意见的热潮是迟早会出现的。现在这些人认为“…

简单说手什么是JWT?

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案。 传统的session认证 http协议本身是一种无状态的协议&#xff0c;而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证&#xff0c;那么下一次请求时&#xff0c;用户还要再一…

【Lingo】【MATLAB】【求解运筹学问题模板题】

文章目录一、线性规划模型&#xff08;Lingo&#xff09;1.线性规划问题&#xff08;模板&#xff09;2.求解最优化问题3.包装箱平板车问题4.职员时序安排问题5.运输问题6.排菜单问题7.工地施工问题8.生产计划优化研究&#xff08;柴油机生产&#xff09;二、线性规划问题&…

机器学习算法基础——逻辑回归

01逻辑回归可以用来解决简单的二分类问题。 逻辑回归的预测函数为hθ(x)g(θTx)h_\theta (x)g(\theta^Tx)hθ​(x)g(θTx)&#xff0c;其中g(x)g(x)g(x)为sigmoidsigmoidsigmoid函数&#xff0c;用于将数值映射到区间[0,1][0,1][0,1]中&#xff0c;然后再取对数值用于刻画损失函…

51单片机实训day3——点亮LED灯、闪烁LED灯(一)理论

内 容&#xff1a;编写代码实现LED灯的点亮功能 学 时&#xff1a;2学时 知识点&#xff1a;分析原理图、LED灯控制原理 重点&#xff1a;GPIO参数配置、LED原理图分析 难点&#xff1a;编写 GPIO参数配置函数、LED点亮函数 时间&#xff1a;2022年12月21日 9:00&#xff5e;…

实验1 数据库定义与操作语言实验

前言&#xff1a;实验本身并不是很难&#xff0c;照着实验指导书抄就行&#xff0c;不过注意有些sql语句和mysql语句是不相同的&#xff0c;需要进行一定的修改 数据集链接 实验1 数据库定义与操作语言实验 实验1.1 数据库定义实验 1.实验目的 理解和掌握数据库DDL语言&am…

指挥中心显示大屏类型简介

因工作需要&#xff0c;现在需要不断补充指挥中心建设过程中各种设备知识&#xff0c;怕被别人忽悠了也不知道&#xff0c;抓紧学习了解。今天学习大屏部分&#xff0c;目前来说&#xff0c;常见的显示大屏主要分为DLP拼接屏、LCD拼接屏和LED小间距大屏几种类型。 1、DLP大屏 …

【maven工程的pom.xml文件内部结构详解+maven工程的多层次依赖管理】

目录pom文件内部【结构详解】pom文件内部【依赖管理】1、依赖传递&#xff1a;2、依赖传递过程中&#xff0c;版本冲突&#xff1a;3、依赖传递过程中&#xff0c;对外隐藏主动断开&#xff1a;pom文件内部【依赖的作用范围】pom文件内部【结构详解】 <?xml version"…

【ARMv8 异常模型入门及渐进 11 - Linux 中断上下文 irq_enterirq_exit】

文章目录1.1 背景1.1.1 in_interrupt 定义1.1.2 irq_count 定义1.1.3 preempt_count 各域含义1.1.4 ARMv8 中断处理流程回顾1.1 背景 在 Linux 代码中经常会看到 WARN_ON(in_interrupt()); 或者 BUG_ON(in_interrupt()); 从名字可以看出这两句的含义是&#xff1a;如果当前处在…

运用手机多媒体之使用通知

文章目录使用通知将程序运行到手机上使用通知创建通知渠道通知的基本用法通知的进阶技巧setStyle()方法不同重要等级的通知渠道使用通知 将程序运行到手机上 在AS当中除了使用模拟器来运行我们的程序,还可以使用真机来运行我们写的程序想要将程序运行到手机上,首先需要将手机…

推荐系统学习笔记-推荐系统分布式离线训练

背景 在推荐、广告、搜索等互联网场景下&#xff0c;动则TB甚至PB级数据量。导致几乎不可能在传统单机环境下完成机器学习模型的训练。分布式机器学习训练成为称为唯一选择。 主要手段 • Spark MLlib • Parameter Server • Tensorflow Spark MLlib MLlib从功能上说与Sc…

如何利用地表温度遥感数据和气象资料计算农田地表水热通量

地表水热通量主要包括感热/显热通量和潜热通量&#xff0c;是陆-气交互以及水-热-碳循环研究的重要变量。其中&#xff0c;潜热通量是地表蒸散发的能量形式&#xff0c;对农业水资源管理、作物水分利用效率等非常关键。由于热红外遥感对地表干湿变化、以及农业干旱响应快速&…