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

news/2025/3/18 9:15:11/

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/news/1580027.html

相关文章

华为hcia——Datacom实验指南——TCP传输原理和数据段格式

什么是TCP TCP是一种可靠的端到端的传输层协议&#xff0c;仅应用于单波通信。 采用TCP协议作为传输方式的应用层服务&#xff0c;再进行数据传输前&#xff0c;都需要进行TCP协议的创建。 TCP报文的格式 sequence number&#xff08;序列号&#xff09; 占4个字节&#x…

鸿蒙Next开发中的坑与问题总结

文章目录 引言1. 环境搭建问题问题描述解决方案 2. 应用开发中的常见问题问题1&#xff1a;UI布局不兼容问题描述解决方案示例代码 问题2&#xff1a;分布式能力调用失败问题描述解决方案示例代码 问题3&#xff1a;Ability生命周期管理问题问题描述解决方案示例代码 3. 调试与…

一些docker命令

一、基础命令 查看 Docker 版本 docker --version 或 docker version&#xff1a;显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info&#xff1a;显示 Docker 系统的详细信息&#xff0c;包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…

VLLM:虚拟大型语言模型(Virtual Large Language Model)

VLLM&#xff1a;虚拟大型语言模型&#xff08;Virtual Large Language Model&#xff09; VLLM指的是一种基于云计算的大型语言模型的虚拟实现。它通常是指那些由多个服务器组成的分布式计算环境中的复杂机器学习模型&#xff0c;这些模型能够处理和理解大量的文本数据。VLLM的…

光伏储能:未来能源的黄金搭档

光伏储能正在重塑全球能源格局。随着技术进步和成本下降&#xff0c;这一组合已成为清洁能源领域最具潜力的解决方案。 光伏发电受天气影响大&#xff0c;发电不稳定。储能系统的加入完美解决了这一难题。白天储存的太阳能&#xff0c;可以在夜晚或阴天时稳定输出&#xff0c;…

Ubuntu22 LLM GPU本地开发环境搭建:4090显卡/cuda/pytorch

0. 4090 显卡开箱与安装 可参考文章&#xff1a; https://www.toutiao.com/item/7477816734344217100/ 扩展内存注意事项 机箱过来只有一条32G内存&#xff0c;扩展到4条32G ddr5 内存条&#xff0c;开机可能要等约2分钟&#xff01;&#xff01;&#xff01;处于黑屏状态&…

【Redis】缓存穿透、缓存击穿、缓存雪崩

在分布式系统和高并发场景中&#xff0c;缓存机制是提高系统性能的重要手段。 然而&#xff0c;缓存在某些情况下会出现三种典型的异常现象&#xff1a;缓存穿透、缓存击穿和缓存雪崩。 1. 缓存穿透 现象 查询的数据在缓存和数据库中都不存在&#xff0c;每次请求都直接打到数…

【eNSP实战】(续)一个AC多个VAP的实现—将隧道转发改成直接转发

在 一个AC多个VAP的实现—CAPWAP隧道转发 此篇文章配置的基础上&#xff0c;将隧道转发改成直接转发 一、改成直接转发需要改动的配置 &#xff08;一&#xff09;将连接AP的接口改成trunk口&#xff0c;并允许vlan100、101、102通过 [AC1]interface GigabitEthernet 0/0/8 …