vue关于自定义指令与v-if冲突的问题
自定义指令与v-if冲突
问题
当同时存在 v-if 和自定义隐藏的指令(后面统一称为v-power) el 会被删除,单元素上的指令依旧会执行,修改的是上一个元素的显示影藏
解决
第一种方式,将v-if 替换为v-show,这样元素一直存在,就不会出现问题,(如果你的自定义指令会动态改变display属性,那就可能和v-show冲突 v-show是通过display:none来控制影藏,这点需要注意,只是单一的影藏,就不需要考虑了)
第二种方式,将v-if指令合并到自定义中 传入一个对象;
改指令实现通过传入的对象来实现是否需要影藏,
<div v-power="{power:1,vIf:true}"></div>
Vue.directive('power', { update: function (el, binding, vnode) { vnode.context.$nextTick(()=>{ const power = [1,2,3,4] const data = binding.value // 获取绑定的值 console.log('power',power); console.log('data',data); //存在v-if 指令使用,合并指令, if(data.vIf){ //权限数组中不存在表示影藏 if (!data.power.includes(power)) { el.style.display = "none" } }else{ el.remove() //v-if 为false 删除元素,模拟v-if } }) } })
vue指令v-for和v-if为什么不能同时使用
指令v-for和v-if不建议同时使用
在vue2.x中,v-for优先级是高于v-if的,如果在同一个元素中使用了v-for和v-if,那么在渲染时,v-for的每一项都要重复运行v-if,这会降低渲染的效率
解决方式
可以将v-if的功能替换为 在一个计算属性上面遍历后使用
computed: { activeUsers: function () { return this.users.filter(function (user) { return user.isActive }) } } <ul> <li v-for="user in activeUsers" :key="user.id" > {{ user.name }} </li> </ul>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
如何解决Vue请求接口出现跨域问题Access-Control-Allow-Origin
这篇文章主要介绍了如何解决Vue请求接口出现跨域问题Access-Control-Allow-Origin,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-10-10ElementUI 组件之Layout布局(el-row、el-col)
这篇文章主要介绍了ElementUI 组件之Layout布局(el-row、el-col),本文通过实例代码图文相结合给大家介绍的非常详细,感兴趣的朋友一起看看吧2024-07-07vue-element-admin后台生成动态路由及菜单方法详解
vue-element-admin后台管理系统模板框架 是vue结合element-ui一体的管理系统框架,下面这篇文章主要给大家介绍了关于vue-element-admin后台生成动态路由及菜单的相关资料,需要的朋友可以参考下2023-09-09
最新评论