vue关于自定义指令与v-if冲突的问题

 更新时间:2022年08月15日 11:02:37   作者:MmM豆  
这篇文章主要介绍了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-router路由传参及隐藏参数问题

    vue-router路由传参及隐藏参数问题

    这篇文章主要介绍了vue-router路由传参及隐藏参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vuejs 组件——props数据传递的实例代码

    Vuejs 组件——props数据传递的实例代码

    本篇文章主要介绍了Vuejs 组件——props数据传递的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • vue中是怎样监听数组变化的

    vue中是怎样监听数组变化的

    这篇文章主要介绍了vue中是怎样监听数组变化的,帮助大家更好的理解和学习vue,感兴趣的朋友可以了解下
    2020-10-10
  • 如何解决Vue请求接口出现跨域问题Access-Control-Allow-Origin

    如何解决Vue请求接口出现跨域问题Access-Control-Allow-Origin

    这篇文章主要介绍了如何解决Vue请求接口出现跨域问题Access-Control-Allow-Origin,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • ElementUI 组件之Layout布局(el-row、el-col)

    ElementUI 组件之Layout布局(el-row、el-col)

    这篇文章主要介绍了ElementUI 组件之Layout布局(el-row、el-col),本文通过实例代码图文相结合给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-07-07
  • 初试vue-cli使用HBuilderx打包app的坑

    初试vue-cli使用HBuilderx打包app的坑

    这篇文章主要介绍了初试vue-cli使用HBuilderx打包app的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • vue路由切换之淡入淡出的简单实现

    vue路由切换之淡入淡出的简单实现

    今天小编就为大家分享一篇vue路由切换之淡入淡出的简单实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue-element-admin后台生成动态路由及菜单方法详解

    vue-element-admin后台生成动态路由及菜单方法详解

    vue-element-admin后台管理系统模板框架 是vue结合element-ui一体的管理系统框架,下面这篇文章主要给大家介绍了关于vue-element-admin后台生成动态路由及菜单的相关资料,需要的朋友可以参考下
    2023-09-09
  • 如何构建 vue-ssr 项目的方法步骤

    如何构建 vue-ssr 项目的方法步骤

    这篇文章主要介绍了如何构建 vue-ssr 项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Vue中Video标签播放解析后短视频去水印无响应解决

    Vue中Video标签播放解析后短视频去水印无响应解决

    这篇文章主要为大家介绍了Vue中使用Video标签播放 <解析后的短视频>去水印视频无响应的解决方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04

最新评论