Vue2

2022.5.2、3 学习笔记

目录

3.4.4 组件之间的父子关系        

3.4.5 组件的 props

3.4.6 组件之间的样式冲突问题

四、vue基础入门 (二)

4.1 组件的生命周期

4.1.1 生命周期 & 生命周期函数

4.1.2 组件生命周期函数的分类

4.1.3 生命周期图示

4.2 组件之间的数据共享

4.2.1 组件之间的关系

4.2.2 父子组件之间的数据共享

4.2.3 兄弟组件之间的数据共享

4.3 ref引用

4.3.1 什么是 ref 引用

4.3.2 使用 ref 引用 DOM 元素

4.3.3 使用 ref 引用组件实例

4.3.4 this.$nextTick(callback) 方法

4.4 购物车案例

4.5 总结


3.4.4 组件之间的父子关系        

组件在被封装好之后,彼此之间是相互独立的,不存在父子关系

使用组件的时候,根据彼此的嵌套关系,形成了父子关系、兄弟关系

 

1. 使用组件的三个步骤

2. 通过 components 注册的是私有子组件

例如:

在组件 A 的 components 节点下,注册了组件 F。则组件 F 只能用在组件 A 中;不能被用在组件 C 中。

请大家思考两个问题:① 为什么 F 不能用在组件 C 中?② 怎样才能在组件 C 中使用 F?

——组件 F是私有子组件。

3. 注册全局组件

在 vue 项目的 main.js 入口文件中,通过 Vue.component() 方法,可以注册全局组件。示例代码如下:

3.4.5 组件的 props

props 是组件的自定义属性,在封装通用组件的时候,合理地使用 props 可以极大的提高组件的复用性!

它的语法格式如下:

1. props 是只读的

vue 规定:组件中封装的自定义属性是只读的,程序员不能直接修改 props 的值。否则会直接报错:

要想修改 props 的值,可以把 props 的值转存到 data 中,因为 data 中的数据都是可读可写的!

2. props 的 default 默认值

在声明自定义属性时,可以通过 default 来定义属性的默认值。示例代码如下:

3. props 的 type 值类型

在声明自定义属性时,可以通过 type 来定义属性的值类型。示例代码如下:

4. props 的 required 必填项

在声明自定义属性时,可以通过 required 选项,将属性设置为必填项,强制用户必须传递属性的值。示例代码如下:

1.

  • props 是"自定义属性",允许使用者通过自定义属性,为当前组件指定初始值
  • 自定义属性的名字,是封装者自定义的(只要名称合法即可)
  • props 中的数据,可以直接在模板结构中被使用
  • 注意:props 是只读的,不要直接修改 props 的值,否则终端会报错!

2.

3.4.6 组件之间的样式冲突问题

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

导致组件之间样式冲突的根本原因是:

① 单页面应用程序中,所有组件的 DOM 结构,都是基于唯一的 index.html 页面进行呈现的

② 每个组件中的样式,都会影响整个 index.html 页面中的 DOM 元素

1. 思考:如何解决组件样式冲突的问题

为每个组件分配唯一的自定义属性,在编写组件样式时,通过属性选择器来控制样式的作用域,示例代码如下:

2. style 节点的 scoped 属性

为了提高开发效率和开发体验,vue 为 style 节点提供了 scoped 属性,从而防止组件之间的样式冲突问题

3. /deep/ 样式穿透

如果给当前组件的 style 节点添加了 scoped 属性,则当前组件的样式对其子组件是不生效的。如果想让某些样式对子组件生效,可以使用 /deep/ 深度选择器

四、vue基础入门 (二)

4.1 组件的生命周期

4.1.1 生命周期 & 生命周期函数

生命周期(Life Cycle)是指一个组件从创建 -> 运行 -> 销毁的整个阶段,强调的是一个时间段

生命周期函数:是由 vue 框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行

注意:生命周期强调的是时间段,生命周期函数强调的是时间点

4.1.2 组件生命周期函数的分类

4.1.3 生命周期图示

可以参考 vue 官方文档给出的“生命周期图示”,进一步理解组件生命周期执行的过程:

Vue 实例 — Vue.js

(仔细理解下图。最重要的生命周期函数:

created:在此处已经将props、data和methods第一次初始化完成,所以一般会在此处发起Ajax请求。

mounted:第一次把DOM元素渲染到浏览器中,最早在此处操作DOM元素,在此之前浏览器中还没有组件的DOM结构。

updated:当数据发生变化后,为了可以操作最新的DOM结构,必须把代码写到updated生命周期函数中。

!!!针对一个组件来讲,① 组件创建阶段的四个函数从上到下只可以被执行1次(用到一次组件就会创建一次组件)。② 组件运行阶段就是组件和用户产生交互,此阶段的两个函数最少执行0次,最多执行N次。在此阶段中只有当数据发生改变时才会触发beforeupdate函数,因此在beforeupdate阶段数据是最新的但是UI结构还是原先的。在updated阶段数据和UI结构完成了同步,都是最新的。③ 组件销毁阶段的两个函数只会执行1次。)

另:

 day4生命周期 demo-1Test.vue:

4.2 组件之间的数据共享

4.2.1 组件之间的关系

在项目开发中,组件之间的最常见的关系分为如下两种:

① 父子关系

② 兄弟关系

(比较远的关系可以当做兄弟关系)

4.2.2 父子组件之间的数据共享

父子组件之间的数据共享又分为:

父 -> 子共享数据

子 -> 父共享数据

1. 父组件向子组件共享数据

父组件向子组件共享数据需要使用自定义属性父组件中通过v-bind为自定义属性绑定属性值,子组件中通过props声明自定义属性。示例代码如下:

2. 子组件向父组件共享数据

子组件向父组件共享数据使用自定义事件。示例代码如下:

4.2.3 兄弟组件之间的数据共享

在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus

EventBus 的使用步骤:

① 创建 eventBus.js 模块,并向外共享一个 Vue 的实例对象

② 在数据发送方调用 bus.$emit('事件名称', 要发送的数据) 方法触发自定义事件

③ 在数据接收方调用 bus.$on('事件名称', 事件处理函数) 方法(该方法需要写到 created生命周期函数中)注册一个自定义事件

4.3 ref引用

4.3.1 什么是 ref 引用

ref 用来辅助开发者在不依赖于 jQuery 的情况下获取 DOM 元素或组件的引用

每个 vue 的组件实例上,都包含一个 $refs 对象,里面存储着对应的 DOM 元素或组件的引用。默认情况下,组件的 $refs 指向一个空对象。

4.3.2 使用 ref 引用 DOM 元素

如果想要使用 ref 引用页面上的 DOM 元素,则可以按照如下的方式进行操作:

4.3.3 使用 ref 引用组件实例

如果想要使用 ref 引用页面上的组件实例,则可以按照如下的方式进行操作:

案例1.控制文本框和按钮的按需切换

通过布尔值 inputVisible 来控制组件中的文本框与按钮的按需切换。示例代码如下:

案例2. 让文本框自动获得焦点

当文本框展示出来之后,如果希望它立即获得焦点,则可以为其添加 ref 引用,并调用原生 DOM 对象的.focus() 方法即可。示例代码如下:

4.3.4 this.$nextTick(callback) 方法

组件的 $nextTick(cb) 方法,会把 cb 回调推迟到下一个 DOM 更新周期之后执行。通俗的理解是:等组件的DOM 更新完成之后,再执行 cb 回调函数。从而能保证 cb 回调函数可以操作到最新的 DOM 元素。

把上例修改为:

4.4 购物车案例

4.5 总结

① 能够知道 vue 中常用的生命周期函数

  • 创建阶段、运行阶段、销毁阶段
  • created、mounted

② 能够知道如何实现组件之间的数据共享

  • 父 -> 子(自定义属性)
  • 子 -> 父(自定义事件)
  • 兄弟组件(EventBus)

③ 能够知道如何使用 ref 引用 DOM 元素或组件

  • 给元素或组件添加 ref="xxx" 的引用名称
  • 通过 this.$refs.xxx 获取元素或组件的实例
  • $nextTick() 函数的执行时机
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值