为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第13天 vue基础入门(中)

标签:
Vue.js
模块名
描述
课程名称
前端工程师2022版
课程章节
vue基础入门(中)
打卡知识进程
知识进程:13/20
✔ (1)1-1 组件的定义及复用性,局部组件和全局组件(1)
✔(2)1-2 组件的定义及复用性,局部组件和全局组件(2)
✔(3)1-3 组件间传值及传值校验
✔ (4)1-4 单项数据流的理解
✔(5)1-5 Non-Props 属性是什么
✔(6)1-6 父子组件间如何通过事件进行通信(1)
✔(7)1-7 父子组件间如何通过事件进行通信(2)
✔(8)1-8 组件间双向绑定高级内容(选学)
✔(9)1-9 使用插槽和具名插槽解决组件内容传递问题(1)
✔(10)1-10 使用插槽和具名插槽解决组件内容传递问题(2)
✔(11)1-11 作用域插槽
✔(12)1-12 动态组件和异步组件
✔(13)1-13 基础语法知识点查缺补漏
(14)2-1 使用 Vue 实现基础的 CSS 过渡与动画效果
(15)2-2 使用 transition 标签实现单元素组件的过渡和动画效果(1)
(16)2-3 使用 transition 标签实现单元素组件的过渡和动画效果(2)
(17)2-4 使用 transition 标签实现单元素组件的过渡和动画效果(3)
(18)2-5 组件和元素切换动画的实现
(19)2-6 列表动画
(20)2-7 状态动画
主讲老师
Dell
学习开始时间
2022.09.17 18:00
学习结束时间
2022.09.17 19:00
总计时
60min
课程收获

我们始终围绕是什么+为什么+怎么用
来输出所学收获
v-once 是你的 div 标签只被渲染一次,后面即便数据发生变化了,也不会再渲染了,只会渲染一次。‍‍
ref 是获取dom节点用的一个语法。
如果你涉及多层组件的传值的话,可以考虑用provide和inject的搭配的语法来使用,‍‍
provide提供数据,
inject直接跨越多层组件来使用就行了。‍‍
学习感受/感想/领悟(心得)
我真的很不错。

课程内容:
2022.09.17的学习内容:

vue基础入门(中)

1-13 基础语法知识点查缺补漏

1. 学习内容:
(1) v-once、ref、provide、inject

示例代码:

假如我在div标签加上v-once指令,示例代码:

执行效果:

代码解读:

点击 1 你会发现它已经不会加 1 了,但是如果我们看vm.$data.count的话,‍‍结果已经变成11了,但是页面展示的还是1:

所以 v-once 它的意思是什么?它的意思是这样的,‍‍你的 div 标签只被渲染一次,后面即便数据发生变化了,你也不要再渲染了,你只渲染一次就行了。‍‍所以v-once是这样的一个指令,

所以如果你想让某一个标签只渲染一次的话,用它就可以了。‍‍

我们接着学习 【ref】 reference 引用 这样的概念,来看这样的代码示例:

代码解读:

ref 是干什么用的?
有的时候比如说‍‍我是可以通过数据来控制 dom 的一些展示的,但是偶尔会有这样的情况,‍‍什么情况?
比如说你做一些轮播效果的时候,你必须得怎么样?‍‍
在获取到这个模板对应的标签的真正的dom节点。‍‍

但如果你想获取到真正的 dom 节点的话,‍‍以前的那些语法是没有办法获取到的。比如说我在 mounted 里面,页面已经加载完成了,一定要记得必须在mounted 里面写,‍‍因为只有页面都已经挂载完成之后才存在 dom 这个概念,否则你比如说 create 这个时候,‍‍其实它没有把这些标签挂载到元素上,你根本就没法获取 dom。‍‍所以如果想要获取dom,

首先你尽量在 mounted 里面去写一些代码,如果获取dom我们怎么获取?‍‍
你想获取哪个dpm就在哪个dom节点上加一个ref,给它一个名字,之后你在 mounted 里面等待挂载结束之后,‍‍
就可以通过this.$refs.count 来实现,this点 点的是对应的 ref的名字来获取到 dom节点了,‍‍
执行结果:

它会报一个错说我们的模板上语法有点问题,我们看一下 div标签没有闭合上,修改如下:

再看效果:

现在能够把 dom 标签给打印出来,所以这就是 ref 的使用场景
比如说如果页面加载完成了,‍‍渲染也完成了,挂载好了之后你必须得操作dom,比如拿到count之后,你让它的innerHTML等于‍‍ hello,
你必须要做这些操作的时候,那么你要获取到dom节点的时候,可以用ref这种引用的方式去获取到‍‍对应的dom节点来做一些操作。‍‍

ref 实际上它是获取什么?‍‍实际上是获取dom节点用的一个语法。【但是我不建议大家过多的使用dom的操作,‍‍除非逼不得已的情况下才去操作dom】

它除了获取节点之外,它还可以获取什么?它还可以获取组件的引用。

代码示例:

代码解读:

在第24行我直接用common-item,‍‍然后我在common-item里面定义一个方法,‍‍比如说methods‍‍叫sayHello,
它干了件什么事情?
alert hello。‍‍

在父组件里面我们可以给子组件加一个ref等于‍‍比如说common给它一个引用,那么等到加载完成之后,我们可以去打印一下 this点$refs点comment,

如果获取到自组件的引用之后,我们在父组件里就可以调用子组件里面的方法了。‍‍
效果:

它会弹出一个 hello。【alert】

所以你也可以通过ref这种语法获取到子组件或者子的Vue实例的这样的引用,‍‍通过引用再去调用子组件的一些方法。

所以ref实际上是获取 dom 节点或者组件引用的一个语法。Ok这么去写就可以了。‍‍

接着我们再学习 provide 和 inject,‍‍ provide 和 inject是帮助我们做多级组件传值的一个语法,来看代码示例:

代码解读:【耐心看完】

比如说 data 里面有一个count,值为1,然后我调一个child,把属性传给子组件,【第22行】怎么传?

我要count等于count传下来,【第22行】

子组件我叫做child,‍‍然后它怎么接?
它要props接受count参数,然后在这里用 count参数,

假设组件还有子组件,下面孙子组件也需要用count,那得怎么做呢?‍‍

比如说三层传递我得再写一个组件叫child-child,然后【第29行】这里我要调用 child-child 两层的一个子组件,我怎么把 count 再传下去?

我要count等于冒号count,然后【第33行】在这里面再接收count,把 count打印出来【第34行】。‍‍

也就是说如果父组件传给子组件的子组件的时候,‍‍也就父组件传给孙子组件的时候,那要怎么把这个数据一层层的传下去?

首先要通过props把组件传给子组件,‍‍再通过props把子组件的属性再传给孙子组件,就这样层层的传递,‍‍这才三层,比如说再有一层child-child-child ,是不是你又要中间通过plus传递一层?‍‍‍‍

如果涉及到一个属性,要经过很多层的传递的话,现在这种写法实际上就比较冗余比较麻烦了,‍‍传递的过程实在是太麻烦了。‍‍

你可以想象如果十几层的话要传死你对不对?
为了解决这个问题,我们可以用一个新的语法,我们叫做provide和inject,我们可以怎么做?
示例代码:

代码解读:

首先在这里我们写一个provide,‍‍【第20行】然后我把这个可以传个 1,
比如说现在你要给子组件传的就是 1,我通过provide里面写一个count:1

子组件就没有必要再去取 count了,没必要像下面这么写:

因为它直接要传给孙子组件,那不必一层层的传,‍‍子组件用不到 count,它就不去传递,也不取这个数据就好了。‍‍

但孙子组件想要用count,‍‍这个时候它怎么能用到父组件里面的 count?

它需要在这里写一个inject跟一个数组:【第35行】

父组件定一个数据,‍‍子组件中间不需要帮它层层的传递,孙子组件只要inject去注入 count就可以直接用了。‍‍

所以如果你涉及多层组件的传值的话,可以考虑用provide和inject的搭配的语法来使用,‍‍provide提供数据,inject直接跨越多层组件来使用就行了。‍‍

在这里我如果想把data里面的数据传给孙子组件,怎么做?

这个东西如果是数据里面的东西的话,‍‍【第17行】
不能通过这样的语法来传递:

你要怎么传递?‍‍

示例代码:

你这里要写一个箭头函数,或者说你要把provide变成一个函数,【第20行】

然后我要return一个对象,在这里面我写一个count是 this点count才可以。‍‍【第21-22行】

其实它还有一个问题,‍‍比如说现在我把 count 传给孙子组件,这孙子组件直接去用count展示count,

代码示例:

这里比如说我有一个按钮button,叫做Add增加,
然后绑定click事件等于count加等于1,‍‍每次点击让 count加一,

我们的理解是count变化了,是不是provide里面的 count 就会跟着变化,‍‍然后下面孙子组件展示的内容就会跟着变化?

点击 Add,其实这个数据展示并不会发生变化:

这是什么原因呢?‍‍
是因为这种语法写 provide提供这种数据给孙子组件的话,它是一次性的,‍‍它不是一个响应式的双向绑定的这样的一个数据提供的方式,上面的数据改变了,‍‍它不会感知到 this点count的改变 重新给孙子组件传,

所以孙子组件拿到的永远是你第一次传递的这个值,‍‍有没有办法解决这个问题?

后面会再补充这块的内容。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消