前端(vue)学习笔记(CLASS 4):组件组成部分与通信

server/2025/3/19 0:12:01/

1、组件的三大组成部分(结构/样式/逻辑)

注意点:

1、结构只能有一个根元素

2、全局样式(默认),影响所有组件;局部样式,scoped下样式,只作用于当前组件

3、el根实例独有,data是一个函数,其他配置项一致

样式注意点:

默认情况下,写在组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题

1、全局样式:默认组件中的样式会作用到全局

2、局部样式:可以给组件加上scoped属性,可以让样式只作用于当前组件

scoped原理

1、当前组件内标签都被添加上data-v-hash值的属性

2、css选择器都被添加[data-v-hash]的属性选择器

最终效果:必须是当前组件的元素,才会有这个自定义的属性,才会被这个样式作用到

2、data函数

一个组件的data选项必须是一个函数,保证每个组件实例维护独立的一份数据对象

例如:

data() {return {count: 100}
},

每次创建新的组件实例,都会新执行一次data函数,得到一个新对象

3、组件通信

组件通信,就是指组件与组件之间的数据传递

组件的数据是独立的,无法直接访问其他组件的数据

想用其他组件的数据->组件通信

组件关系分类:

1、父子关系

2、非父子关系

1、父子关系通信

1、父组件通过props将数据传递给子组件

具体流程,在父组件中,如果调用了子组件,需要给子组件添加一个自定义属性,在头标签:

<div :属性名="传递的参数名"></div>

之后在子组件中添加配置项props

props:['属性名']

 即可在子组件中使用父组件的参数

2、子组件利用$emit通知父组件修改更新

具体流程,在子组件中使用$emit,可能会放在函数里

handClick () {this.$emit('通知','修改后的数据')
}

然后在父组件中的子组件内加上@changTitle="函数名",用于监听事件

创建一个函数,函数的参数为新参数的名字,最后在函数内进行修改

2、prop详解

prop定义:组件上 注册的一些 自定义属性

Prop作用:向子组件传递数据

特点:可以传递任意数量和任意类型的prop

校验:

作用:为组件的prop指定验证要求,不符合要求,控制台就会有错误提示,帮助开发者,快速发现错误

语法:

1、类型校验

props: {校验的属性名:类型
}

2、非空校验

3、默认值

4、自定义校验

props:{校验的属性名:{type:类型,required:true,//是否必填default:默认值,//morzvalidator(value) {//自定义校验逻辑return 是否通过校验}}
}

prop&data

共同点:都可以给组件提供数据

区别:

data的数据是自己的,可以随意修改

prop的数据是外部的,不能直接改,要遵循单向数据流

3、非父子关系通信

利用event bus事件总线

作用:完成非父子组件之间,进行简易消息传递(复杂场景,vuex)

1、创建一个都能访问到的事件总线(空Vue实例),utils/EventBus.js

import Vue form 'vue'
const Bus = new Vue()
export default Bus

2、接收方,监听Bus实例的事件

created() {Bus.$on('sendMsg',(msg) => {this.msg=msg})
}

3、发送方,触发Bus实例的事件

Bus.$emit('sendMsg','这是一个消息')

4、v-model原理

原理:v-model本质上是语法糖,例如在输入框上,就是value属性和input事件的合写

作用:提供双向数据绑定

1、数据变,视图跟着变:value

2、视图变,数据跟着变@input

注意:$event用于在模板中,获取事件的形参

5、表单类组件封装&v-model简化代码

1、表单类组件封装

1、父传子:数据应该是父组件props传递过来的,v-model拆解绑定数据

<BaseSelect :cityId="selectId" @事件名="selectedId=$event"></BaseSelect>

2、子传父:监听输入,子传父传值给父组件修改

  <select :value="cityId" @change="handleChange"></select>
props: {cityId: String
}
  methods: {handleChange(e) {this.$emit('事件名',e.target.value)}
}
2、父组件v-model简化代码,实现父子双向绑定

1、子组件中:prop通过value接收,事件触发input

2、父组件中:v-model给组件直接绑数据(:value+@input)

  <BaseSelect v-model="selectId"></BaseSelect>

6、.sync修饰符

作用:可以实现子组件与父组件数据的双向绑定,简化代码

特点:prop属性名,可以自定义,非固定为value

场景:封装弹框类的基础组件,visible属性 true显示false隐藏

用法,直接在属性名后加上即可

在子组件中利用props接收,并且用$emit通知,其中的事件名为update:属性名

7、ref和$refs

作用:利用这个可以用于获取dom元素,或组件实例

特点:查找范围->当前组件内(更精确稳定)

1、获取dom:

目标标签-添加ref属性,属性值自拟

恰当时机,通过this.$refs.ref属性值,获取目标标签

要在mounted后才能进行获取

2、获取组件实例

目标组件,添加ref属性

恰当时机,通过this.$refs.xxx,获取目标组件,就可以调用组件对象里面的方法

8、Vue异步更新

使用$nextTick:等dom更新完后,才会触发执行此方法里的函数

this.$nextTick(() => {this.$refs.inp.focus()
})


http://www.ppmy.cn/server/176092.html

相关文章

平板作为笔记本副屏使用spacedesk

平板作为笔记本的一块副屏使用 软件 spacedesk 已上传&#xff0c;可自行下载。&#xff08;上传需要审核且只能绑定一个资源&#xff0c;可在官网自行下载&#xff0c;或私聊我&#xff09; PC版 移动版 spacedesk-2-1-17.apk 电脑版按照提示一步一步安装节即可移动端直接…

SpringBoot入门-(1) Maven【概念+流程】

SpringBoot入门-(1) Maven 动机 对于企业级大项目而言&#xff0c;需要手动导入很大Jar包&#xff0c;费时费力&#xff0c;且Jar包之间也可能存在依赖和冲突&#xff0c;这些关系导致Jar包之间想毛线团一样缠在一起&#xff0c;因此我们需要一个包管理系统帮我们自动下载导入…

06.Python基础4

目录 元组 tuple 1.概述 2.可变数据为什么可变 3.不可变数据如何变化 4.基础操作 4.1创建元组 4.2定位元素 4.3遍历元组 4.4序列拆包 5.字符串 str 5.1定义 5.2编码 5.2.1字符集 5.2.2编码方式 5.2.3不可变 5.3序列 5.4字面值 5.4.1单引和双引号的区别 5.4.2…

jmeter 循环控制器遍历列表中的数据

jmeter遍历列表中的数据并使用if控制器做相应的处理 测试场景请求获取列表接口发送请求JSON Extractor 提取对应字段 Loop Controller计数器If Controller 测试场景 请求获取列表接口使用循环控制器遍历接口&#xff0c;根据state字段判断是否发起其他请求 请求获取列表接口 …

vue/react/vite前端项目打包的时候加上时间最简单版本,防止后端扯皮

如果你是vite项目&#xff0c;直接写一个vite的插件&#xff0c;通过这个插件可以动态注入环境变量&#xff0c;然后当打包的时候&#xff0c;自动注入这个时间到环境变量中&#xff0c;然后在项目中App.vue中或者Main.tsx中打印出来&#xff0c;这就知道是什么时候编译的项目了…

通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)

文章链接&#xff1a; https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能&#xff08;AGI&#xff09;研究中的一个关键挑战。为实现这一目标&#xff0c;许多现有方法&#xff08;例如世界模型&#xff09;旨在捕捉支配物理世界的基本原理&#xff0…

【Mac】安装 Parallels Desktop、Windows、Rocky Linux

一、安装PD 理论上&#xff0c;PD只支持试用15天&#xff01;当然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官网 下载 Install Parallels Desktop.dmg第二步&#xff0c;双击 Install Parallels Desktop.dmg 第三步&#xff0c;双击安装Paralle…

SpringBoot快速入门

文章目录 Spring boot框架Spring Boot特性的核心快速搭建Spring Boot项目Maven依赖管理依赖配置依赖传递依赖排除Maven Help插件 Maven仓库本地仓库中央仓库私服配置国内源Spring Boot的jar包和普通jar包的区别 什么是脚手架&#xff1f;目录介绍为什么要以继承父工程的方式引入…