Riceecir / directive-auth

vue自定义指令v-auth
0 stars 1 forks source link

v-auth 与 v-if 的冲突 #1

Open ac51300696 opened 9 months ago

ac51300696 commented 9 months ago

将预览代码改成

 <div v-if="state === 'mount'" v-auth="auth">
    <p >出现了!</p>
  </div>

控制台就会出现报错

image 这个问题我也正在处理,尝试过很多方案,包括但不限于修改 vnode 进行强制更新,都还没解决 修改 display:none 会减少很多问题,但是在元素选择的时候出现新问题

Riceecir commented 9 months ago

这个问题暂时没发现好的解决方法(我太菜了T^T)。 目前在开发过程中会避免跟v-if在同一个标签上使用,可以在父元素上使用v-if,就功能来看这个指令我是参考v-if的原理做的,也是看做是v-if的封装版本。 假如项目中频繁出现v-if和v-auth在同一标签上,建议采用其他方案,例如用组件来控制权限等。

ac51300696 commented 9 months ago

你可以参考下 vue-use 里的 auth 组件,他是封装成一个组件的方式,用 v-if 控制, vue3 的节点渲染机制做了很多改动,直接 remove‘节点的方法在 3 里面不太跑的动,可能以后会改吧

Riceecir commented 9 months ago

好的!第一次听VueUse,看来跟不上时代了😭 当时是看网上很多封装的指令只remove节点,没有做恢复节点的操作才自己做了一个😵思路还停留在vue2时期,得继续学习跟上时代。