知识点: v-if、v-for、在vue中重写的数组的方法、识别不同的dom节点

v-if

条件渲染有三个: v-if v-else-if v-else,使用方法跟js相似

他们是把多余的dom节点去除(不是none)

<

b55f424fb307acd66db51409f7310f04.png

template标签

既想使用一个标签包裹需要需要的标签,又不想显示包裹标签,可以使用template标签

v-if == true显示

v-if == false隐藏

<

a25932bed61809e7db12f4df901e5cf6.png

v-show

v-show == true 把dom节点显示

v-show == false 把dom节点隐藏(display:none)

<

cba13dd8dc49320c0c48b400c74f776a.png

v-for

v-for的基础使用方法

<

f6347455b88a9b3276911fc569f05f66.png

在数组中使用对象增加评分

<

0368785f711472ffe028d38b01375a01.png

索引: 在item中可以分成item和index(自定义)来写

<

facb380737b1ec98a96cb3a919a51158.png

循环对象

第一个形参: 对象值

第二个形参:对象名

第三个形参: 对象索引

<

b47784b585872d27623843d9c82d8eae.png

v-for还可以循环数字和字符

<

5215875c96b7d34c0340fe448ec59423.png
v-for在开发中的使用:
通常结合template标签使用,因为template标签不会有dom节点
不能直接改变数组中的数据
有一些重写的方法,如push
:key值告诉模板每隔渲染的不一样

写个需求1:

在使用鼠标点击列表中的电影,电影的名字变成西虹市首富,评分6.5

点击之前

75dbc42e17747eb5c53f7d9543cee17d.png

代码:

<

点击后:

9c15b6aff470f96bf490509db083f2f4.png

为什么数据发生改变了,内容没有刷新?

在vue中,数组直接改变,不会被检测到,所以也面不会刷新。(因为数组是引用值,新数据和旧数据的内存地址都一样,所以不会发生改变)

那么如何改变数组中的元素?

使用副本 coucat(),改变为新的内存地址,把列表替换到新数组上。(使vue检测到数据发生改动,重新渲染)

// js的vue中的metods字段

2918a45526fb00f96902b1d3617c73e0.png

dom节点已刷新

需求2: botton按键每点击一下,新增一部电影

<!-- html新增代码 -->

11e4a936153d98749622b8ccb725c9ec.png

为什么我们使用push方法新增,并没有改变内存地址,但是刷新dom了呢?(push是数组原型链上的方法)

因为在vue中重写了push()方法,使在使用push()后vue监测到数据发生变化,所以重新渲染了。

备注:vue中重写了push/pop/reverse等方法,大概有六七个,等有时间再看。

让dom节点识别成不同的dom节点

需求: 使input框倒置

<

倒置前:

2a7e0a2bcb96cbcbe5057549370d1dd7.png

倒置后:

0e1175407a285817f97119660c87d12a.png

问题: reverse也是重写的方法,为什么p标签倒置了,input框没有被倒置呢?

渲染机制: 渲染的时候这几个input框没有什么区别,识别的时候也没有什么不同,为了节省资源,没有重排重绘。

解决: 使用v-bind:绑定key,给不同的input框绑定不同的值,这里刚好可以使用循环的item。这样就可以识别成不一样的input。

<

倒置前:

c19e7657ccc2c95c05da176296cd16ff.png

倒置后

bc31166b488cebe371971cff8f375bfd.png

成功。

Logo

前往低代码交流专区

更多推荐