Vue中的v-if和v-for实例分析
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,本文小编为大家详细介绍"Vue中的v-if和v-for实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中的v-if和v-for实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年02月06日Vue中的v-if和v-for实例分析 {{ item.label }}
本文小编为大家详细介绍"Vue中的v-if和v-for实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中的v-if和v-for实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、作用
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染
v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组或者对象,而 item 则是被迭代的数组元素的别名
在 v-for 的时候,建议设置key值,并且保证每个key值是独一无二的,这便于diff算法进行优化
两者在用法上
二、优先级
v-if 与 v-for 都是 vue 模板系统中的指令
在vue模板编译的时候,会将指令系统转化成可执行的render函数
示例 编写一个 p 标签,同时使用 v-if 与 v-for
{{ item.title }}
创建 vue 实例,存放 isShow 与 items 数据
const app = new Vue({ el: "#app", data() { return { items: [ { title: "foo" }, { title: "baz" }] } }, computed: { isShow() { return this.items && this.items.length > 0 } }})
模板指令的代码都会生成在 render 函数中,通过 app.$options.render 就能得到渲染函数
ƒ anonymous() { with (this) { return _c('div', { attrs: { "id": "app" } }, _l((items), function (item) { return (isShow) ? _c('p', [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) }}
_l 是 vue 的列表渲染函数,函数内部都会进行一次 if 判断
初步得到结论:v-for 优先级是比 v-if 高
再将 v-for 与 v-if 置于不同标签
{{item.title}}
再输出下 render 函数
ƒ anonymous() { with(this){return _c('div',{attrs:{"id":"app"}}, [(isShow)?[_v("\n"), _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)}}
这时候我们可以看到,v-for 与 v-if 作用在不同标签时候,是先进行判断,再进行列表的渲染
我们再在查看下 vue 源码
源码位置:\vue-dev\src\compiler\codegen\index.js
export function genElement (el: ASTElement, state: CodegenState): string { if (el.parent) { el.pre = el.pre || el.parent.pre } if (el.staticRoot && !el.staticProcessed) { return genStatic(el, state) } else if (el.once && !el.onceProcessed) { return genOnce(el, state) } else if (el.for && !el.forProcessed) { return genFor(el, state) } else if (el.if && !el.ifProcessed) { return genIf(el, state) } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { return genChildren(el, state) || 'void 0' } else if (el.tag === 'slot') { return genSlot(el, state) } else { // component or element ...}
在进行if判断的时候,v-for 是比 v-if 先进行判断
最终结论:v-for 优先级比 v-if 高
三、注意事项
1.永远不要把 v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)
2.如果避免出现这种情况,则在外层嵌套template(页面渲染不生成dom节点),在这一层进行v-if判断,然后在内部进行v-for循环
3.如果条件出现在循环内部,可通过计算属性 computed 提前过滤掉那些不需要显示的项
computed: {//过滤出满足条件后的数据再渲染 items: function() { return this.list.filter(function (item) { return item.isShow }) }}
读到这里,这篇"Vue中的v-if和v-for实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
指令
函数
时候
实例
内容
条件
实例分析
分析
优先级
数据
数组
文章
标签
模板
循环
不同
作用
元素
同时
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精灵盛典要关服务器了吗
数据库表单排列一句怎么做
网关可以当作dns服务器填写吗
致远oa数据库表损坏
迁安市网络安全培训
通信网络安全宣教
国内外软件开发现状的报告
app软件开发好学吗
数据库如何筛选
dns服务器不可使用如何处理
海南网络安全培训开播
网络安全主题板报2021
UEBA网络安全
网络安全进国家安全部
数字网络技术百科
软件开发项目质量保证大纲
网络安全美国窃取国家机密
网络安全宣传片歌曲
2k19无法连接服务器
沈阳首创网络技术有限公司
深圳服务器代理lp号
长春华易软件开发公司
创建带密码的数据库
app软件开发好学吗
华为电话网络安全设置
主机屋 数据库名
河南希牧互联网科技有限公司招聘
怎样清除数据库的缓存ipad
软件开发管理制度组成
河东金蝶软件开发怎么选