每日一VUE——组件基础

news2025/2/7 15:44:00

文章目录

    • 认识组件
      • 如何使用
      • 注册方式
    • 组件间传递数据
      • props
      • props的验证
    • 组件事件
      • 组件事件的验证
      • v-model与自定义事件结合使用
    • 组件插槽
    • 动态组件

认识组件

组件由templatescriptstyle三部分组成。

如何使用

  1. 定义组件
  2. 注册组件
  3. 调用组件

注册方式

  • 全局注册
  • 局部注册

以上部分不做赘述了


组件间传递数据

props

在子组件中添加props选项,表示从父组件接受参数

<body>
  <div id="app">
    <!-- 使用Greeting组件 -->
    <greeting name="Alice" message="Hello"></greeting>

    <!-- 使用WeatherDisplay组件 -->
    <weather-display
      :temperature="25"
      :weather-condition="'Sunny'"
      :location="'Beijing'"
    />
  </div>

  <script>
    Vue.component('Greeting', {
      template: '<div class="greeting"><span>{{ message }}, {{ name }}!</span></div>',
      props: {
        name: String,
        message: String
      }
    });

    Vue.component('WeatherDisplay', {
      template: '<div class="weather-display">' +
        '<h2>当前天气</h2>' +
        '<p>温度: {{ temperature }}°C</p>' +
        '<p>天气: {{ weatherCondition }}</p>' +
        '<p>地点: {{ location }}</p>' +
      '</div>',
      props: {
        temperature: Number,
        weatherCondition: String,
        location: String
      }
    });

    new Vue({
      el: '#app'
    });
  </script>
</body>

props表示从上到下的数据流传递,即父组件的数据变化会向下引发传递到子组件的数据更新,反之不行。

/这就意味着不应该在子组件内部修改props选型中的属性值

props的验证

  1. 数据类型验证
props:{
	age:[String, Number, Boolean]
}
  1. 必填值验证
props:{
	age:{
		type: String,
		required: true
	}
}
  1. 默认值验证
props:{
	age:{
		type: String,
		default: 20
	}
}

如果数据类型为数组或者对象数据类型的数据,声明default时要使用函数返回

props:{
	people:{
		type: object,
		default: function(){
			return{
				name:...,
				age:...,
				message:...
			}
		}
	}
}
  1. 自定义验证
props:{
	age:{
		vaildator(value) {
			return value >=0 && value<=100
		}
	}
}

组件事件

props选项实现了从父组件到子组件的单项传递。可以通过组件事件实现父组件可以监听到子组件数据的变化,即子组件向父组件传递数据。

  1. 在子组件中,使用emits选项声明自定义事件;定义可以触发==$emit==内置函数的事件
  2. 当父组件调用子组件时,要使用v-on监听自定义事件,还要再父组件中声明相应事件的处理函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

组件事件的验证

在触发事件时传递的数据作为验证函数的参数,

就是在emits选项声明时从数组方式变为对象方式,每个事件为一个函数,该函数用为验证事件的有效性。

emits:['delete'],  //数组方式
emits:{            //对象方式
	delete: function(value){
		if(value == 1)
        	return true
         else
         	return false
	}
}

v-model与自定义事件结合使用

结合使用 v-model 和自定义事件时,通常不需要在父组件中使用 @ 指令来监听子组件的自定义事件,因为 v-model 已经处理了数据的双向绑定。

在父组件中使用v-model绑定到子组件时,Vue会自动将v-model绑定的值与子组件的某个属性同步,并在内部使用一个名为==update:加上属性名的事件==来通知子组件更新其属性值。

在这里插入图片描述

组件插槽

插槽允许父组件的内容插入到子组件模板的指定位置,可以在不修改子组件代码的情况下,灵活地定制子组件的输出内容,从而实现模板的复用和内容的动态定制。

  • 默认插槽
  • 具名插槽

v-solt指令用于在调用子组件时声明具名插槽,简写:#

//自组件模板结构
<div>
    <solt name='left'><button class='left'>返回</button></solt>
    <solt name='middle'><input type='text'></solt>
    <solt name='right'><button class='right'>确定</button></solt>
</div>
//父组件调用子组件
<child-component>
    <tempalte v-solt:插槽名>
        父组件中替换子组件的内容
    <tempalte>
<child-component>
  • 作用域插槽

作用域插槽允许由子组件提供参数给父组件,父组件可以根据这些参数来定制插槽内容

//自组件模板结构
<div>
    <solt name='left' :num=10><button class='left'>返回</button></solt>  //插槽中的name属性不会作为参数传递
    <solt name='middle'><input type='text'></solt>
    <solt name='right'><button class='right'>确定</button></solt>
</div>
//父组件调用子组件
<child-component>
    <tempalte #v-solt='leftProps'> //自定义对象名
        购物车{{leftProps.num}}
    <tempalte>
<child-component>

动态组件

is属性通常与组件结合使用,来动态地决定在某个位置应该渲染哪个组件,实现同一元素内不同组件间的动态切换

<template>
  <div>
    <!-- 动态组件 -->
    <component :is="currentComponent"></component>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentComponent: 'component-a'
    };
  },
  components: {
    componentA: {
      template: '<div>这是组件A</div>'
    },
    componentB: {
      template: '<div>这是组件B</div>'
    }
  }
};
</script>

内置组件keep-alive

我们可以使用keep-alive将被卸载的组件保存到内存中,以保持存活状态,提高程序效率

<keep-alive>
    <component :is="currentComponent"></component>
</keep-alive>

若有错误与不足请指出,关注DPT一起进步吧!!!

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

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

相关文章

在STM32中给固定的地址写入一个值,并通过memory窗口进行查看

首先对STM32中存储数据的地方有一个了解 一个是FLASH,一个是RAM RAM是易失存储器&#xff0c;FLASH是非易失存储器&#xff0c;这是最直观的解释。 主要记住以下几点&#xff1a; RAM&#xff08;随机存储器&#xff09;&#xff1a;既可以从中读取数据&#xff0c;也可以写…

面试八股——数据库——分库分表

垂直策略 垂直分库 垂直分表 水平策略 水平分库 水平分表&#xff08;和水平分库差不多&#xff0c;区别是但这些表可以在同一个库内&#xff09;

spring-cloud微服务gateway

核心部分&#xff1a;routes(路由)&#xff0c; predicates(断言)&#xff0c;filters(过滤器) id&#xff1a;可以理解为是这组配置的一个id值&#xff0c;请保证他的唯一的&#xff0c;可以设置为和服务名一致 uri&#xff1a;可以理解为是通过条件匹配之后需要路由到&…

Oauth2.1第三方授权前后端分离实现

前言 Spring Cloud 整合 Spring Security Oauth2 请看我上一篇文章 在当今的数字化时代&#xff0c;随着微服务架构的流行和前后端分离技术的广泛应用&#xff0c;如何实现安全、高效的用户认证与授权成为了开发者们面临的重要挑战。Spring Cloud与Spring Security OAuth2作为J…

小程序商城和微商城的区别

移动互联网电商发展迅速&#xff0c;各种商城系统的类型越来越多&#xff0c;人们选择要从多方面考量再进行评估&#xff0c;选择过程变得困难了很多&#xff0c;比如现在火热的微商城和小程序商城&#xff0c;很多人都不太能分清楚。今天&#xff0c;我们就一起来看看这两种商…

BCLinux8U6系统部署oceanbase分布式数据库社区版之三、分布式数据库部署

本文是在完成步骤一、准备 OBD 中控机&#xff0c;步骤二3台数据库服务器准备后&#xff0c;正式开始oceanbase分布式数据库安装。 前序步骤&#xff1a;BCLinux8U6系统部署oceanbase分布式数据库社区版之一、准备 OBD 中控机 BCLinux8U6系统部署oceanbase分布式数据库社区版…

请求头包含“boundary=----WebKitFormBoundary”的request抓包

对于请求头包含“boundary----WebKitFormBoundary”&#xff0c;不能直接使用request.post请求&#xff0c;这类请求是文件上传请求。 s common_login(name, password) # 获取浏览器对象url archive_url /XXX# 这里先定义一个fields参数&#xff0c;格式为你可能需要一个包…

Linux yum搭建Keepalived,2 台机器都有虚拟 IP 问题

文章目录 Keepalived 搭建一、安装二、keepalived配置1、配置文件详解global_defs模块参数vrrp_instance模块参数vrrp_script模块参数 2、修改配置文件3、启动服务 Tips:1️⃣问题&#xff1a;两台机器上面都有VIP的情况2️⃣完整配置文件 Keepalived 搭建 服务IP服务器Keepal…

微信小程序wx.getLocation 真机调试不出现隐私弹窗

在小程序的开发过程中&#xff0c;首页中包含要获取用户地理位置的功能&#xff0c;所以在这里的onLoad&#xff08;&#xff09;中调用了wx.getLocation()&#xff0c;模拟调试时一切正常&#xff0c;但到了真机环境中就隐私框就不再弹出&#xff0c;并且出现了报错&#xff0…

ubuntu16.04安装Eclipse C/C++

1.安装 JDK 官网源码安装 首先打开JDK官网&#xff0c;JDK1.8的下载网址为&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#java8-windows&#xff0c;进入到网址如下图所示&#xff1a; 向下滑动到 JDK1.8的下载界面&#xff0c;如下图所示&#xff1a…

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图&#xff08;Use Case Diagram&#xff09;。2.展现了一组用例、参与者&#xff08;Actor&#xff09;以及它们之间的关系。3.用例图通常包括以下的内容&#xff1a;用例、参与者、用…

SpringBoot项目创建及简单使用

目录 一.SpringBoot项目 1.1SpringBoot的介绍 1.2SpringBoot优点 二.SpringBoot项目的创建 三.注意点 一.SpringBoot项目 1.1SpringBoot的介绍 Spring是为了简化Java程序而开发的&#xff0c;那么SpringBoot则是为了简化Spring程序的。 Spring 框架&#xff1a; Spring…

Python高质量函数编写指南

The Ultimate Guide to Writing Functions 1.视频 https://www.youtube.com/watch?vyatgY4NpZXE 2.代码 https://github.com/ArjanCodes/2022-funcguide Python高质量函数编写指南 1. 一次做好一件事 from dataclasses import dataclass from datetime import datetimedatacl…

如何解决selenium无头浏览器访问页面失败问题!!

无头浏览器简介 无头浏览器&#xff08;Headless browser&#xff09;是一种没有图形用户界面&#xff08;GUI&#xff09;的网络浏览器。它可以在后台运行&#xff0c;并通过编程接口进行控制和操作&#xff0c;而不需要显示界面。通常&#xff0c;传统的浏览器如 Chrome、Fi…

生产控制台厂家的技术要求深度解读

随着科技的不断进步和工业的快速发展&#xff0c;生产控制台在现代化生产线中的作用日益凸显。生产控制台作为生产线的“大脑”&#xff0c;要求厂家不仅具备高超的制造技术&#xff0c;还需对技术要求有深入的理解和掌握。本文将对生产控制台厂家的技术要求进行浅析。 生产控制…

vmware安装ubuntu-18.04系统

一、软件下载 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1fK2kygRdSux1Sr1sOKOtJQ 提取码&#xff1a;twsb 二、安装ubuntu系统 1、把ubuntu-18.04的压缩包下载下来&#xff0c;并且解压 2、打开vmware软件&#xff0c;点击文件-打开 3、选择我们刚刚解…

4.15 网络编程

思维导图 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #inclu…

白盒测试之分支-条件覆盖

白盒测试之分支-条件覆盖&#xff08;蓝桥课学习笔记&#xff09; 实验介绍 分支&#xff08;判定&#xff09;覆盖是设计一定量的测试用例使程序中的每个判断语句的真假分支都得到覆盖&#xff0c;但是分支覆盖不能保证判断语句中每个条件的真、假分支都得到覆盖。那么&…

Linux的学习之路:5、粘滞位与vim

摘要 这里主要是把上章没说完的权限的粘滞位说一下&#xff0c;然后就是vim的一些操作。 目录 摘要 一、粘滞位 二、权限总结 三、vim的基本概念 四、vim的基本操作 五、vim正常模式命令集 1、插入模式 2、从插入模式切换为命令模式 3、移动光标 4、删除文字 5、复…

详解UART通信协议以及FPGA实现

文章目录 一、UART概述二、UART协议帧格式2.1 波特率2.2 奇校验ODD2.3 偶校验EVEN 三、UART接收器设计3.1 接收时序图3.2 Verilog代码3.3 仿真文件测试3.4 仿真结果3.5 上版测试 四、UART发送器设计4.1 发送时序图4.2 Verilog代码4.3 仿真文件测试4.4 仿真结果4.5 上板测试 五、…