v-if的使用记录

文章讲述了如何在Vue.js中使用v-if指令结合includes方法来实现条件渲染。内容包括根据变量值决定组件显示,如控制全选按钮和多选框的显示状态,以及处理从后端获取的字符串数据类型。同时提到了reserve-selection属性在多选框场景下的作用。

v-if与includes的包含关系

一般使用v-if都是简单的一个变量为正或者假。

要么就是三目进行判断  v-if="test==xxx?"通过":" 失效" "

利用v-if控制多个页面中部分页面是否存在全选和操作按钮的显示

 v-if="[1, 3].includes(+reqData.js_status2) 

(+reqData.js_status2)是因为后端传过来的值为字符串  使用+号进行隐式转换控制点进标题后是否显示页面中的相关元素

利用v-if控制多选框

  <!-- 多选框 -->
        <el-table-column
          v-if="[1, 3].includes(+reqData.js_status2)"
          type="selection"
          width="55"
          reserve-selection
        >

点击进入根据传入id进行判断是否需要多选属性

多选的reserve-selection   仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key)

### Vue.js 中 `v-if` 优先级高于 `v-for` 的使用场景和原理 #### 原理分析 在 Vue 3 中,`v-if` 的优先级被设计为高于 `v-for`。这意味着当两者同时存在于同一元素上时,Vue 会先处理 `v-if` 判断逻辑,再决定是否需要执行 `v-for` 渲染循环[^3]。这种机制的核心目的是优化性能并减少不必要的计算开销。 具体而言,在源码实现层面,Vue 会在编译阶段生成抽象语法树 (AST),并通过特定算法确定指令的执行顺序。对于 `v-if` 和 `v-for` 同时存在的情况,Vue 会选择先评估 `v-if` 表达式的布尔值。如果表达式返回 false 或其他假值,则整个节点及其关联的 `v-for` 循环都不会被执行,从而避免了无意义的数据遍历操作[^4]。 #### 使用场景 以下是推荐使用 `v-if` 优先于 `v-for` 的典型场景: 1. **动态过滤数据** 当需要基于某些条件筛选数组中的部分项进行渲染时,应将 `v-if` 放置在内部子元素中而非直接作用于父容器上的 `v-for` 上。例如: ```html <ul> <li v-for="item in items" :key="item.id" v-if="item.isActive"> {{ item.name }} </li> </ul> ``` 这种方式能够有效降低虚拟 DOM 更新成本,因为仅符合条件的项目才会进入实际渲染流程[^4]。 2. **控制复杂结构加载** 如果某个列表组件本身依赖外部异步请求完成初始化工作之前不应该展示任何内容,则可以在包裹该列表的根标签处添加全局性的 `v-if` 控制语句。比如等待 API 调用成功后再呈现完整的表格视图。 3. **提升初始渲染效率** 对于那些可能完全不需要显示出来的大型集合对象(如分页后的多余记录),提前利用简单的真伪测试剔除掉它们有助于加快首屏绘制时间。 需要注意的是官方强烈建议开发者尽量避免让这两个指令共存于单一 HTML 元素之上以免引发潜在混乱或者难以调试的行为模式[^3]。 ```javascript // 示例代码片段演示如何分离if与for逻辑以获得更好维护性和可读性 <template> <div> <!-- 外部整体开关 --> <ul v-if="shouldRenderList"> <!-- 内部逐条验证 --> <li v-for="(person, index) in people" :key="index" v-if="isValidPerson(person)"> Name:{{ person.name }}, Age:{{ person.age }} </li> </ul> </div> </template> <script> export default { data() { return { shouldRenderList: true, people: [ { name: 'Alice', age: 25 }, { name: 'Bob', age: undefined }, // 不合法的人 { name: 'Charlie', age: 30 } ] }; }, methods:{ isValidPerson(person){ return typeof person.age ==='number'&&person.age>0; } } }; </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值