vue自定义指令bug

问题描述:

页面加载时,报已下错误。同时,页面数据不显示

环境介绍:

已经添加了vue自定义指令permission,实现如下,用以控制元素显示权限

复制代码
app.directive('permission', (el, binding) => {
    if (!store.hasPermission(binding.value)) {
        if (!binding.value.includes('list')) {
            el.remove();
        } else {
            // 清除不显示的元素
            el.innerHTML = '';
            // 创建一个父节点
            const parentNode = document.createElement('div');
            parentNode.style.width = '100%';
            parentNode.style.display = 'flex';
            parentNode.style.justifyContent = 'center';
            parentNode.style.alignItems = 'center';

            const imgElement = document.createElement('img');
            imgElement.src = '@/../../public/layout/images/noPermission.png'; // 设置图片路径
            imgElement.alt = '无权限访问图片';
            imgElement.style.objectFit = 'contain';
            imgElement.style.height = '40vh';

            parentNode.appendChild(imgElement);
            el.appendChild(parentNode);
        }
    }
});

页面实现代码

html 复制代码
<Button 
v-if="dialogForm.docStatus == 0" 
v-permission="'project:info:basic'" 
label="提交" 
type="button" 
severity="success"
 @click="onSave(1)"
></Button>

其他介绍:

已知dialogForm.docStatus已经在初始时定义了,并被赋值0;后续,通过接口,将返回结果赋值给该变量。

乍一看是不是没有问题,但是页面确实也报错,不显示数据。

问题分析:

初始页面时,因为初始赋值,button元素是存在的,通过vue自定义指令,发现需要删除该元素,结果因为页面接口返回结果,出发了v-if,直接元素没了。所以自定义指令中的删除逻辑,发现家被偷了,所以报错了。

解决方法:

直接外面包一层,保证自定义指令逻辑执行时,有元素可以操作。

html 复制代码
<div v-if="dialogForm.docStatus == 0">
      <Button 
        v-permission="'project:info:basic'" 
        label="提交" 
        type="button" 
        severity="success" 
        @click="onSave(1)"
        ></Button>
</div>

问题回顾:

对于浏览器的报错,还是没法快速定位,只是答题猜到是因为元素操作导致的,但是结合复杂的页面逻辑,没法准确定位问题(特别是,没有报自己代码错误位置的提示)。有大佬能帮忙解答下,如何定位的技巧吗。

相关推荐
workflower1 天前
Fundamentals of Architectural Styles and patterns
开发语言·算法·django·bug·结对编程
lvchaoq1 天前
记录小程序真机bug,而模拟器无法复现
小程序·bug
喜欢便码2 天前
禅道提交bug的几种状态
bug
从前慢,现在也慢2 天前
(3)Bug篇
学习·bug·测试
西柚小萌新2 天前
【Bug:docker】--Docker国内镜像源加载失败
docker·容器·bug
初圣魔门首席弟子4 天前
c++ bug 记录(merge函数调用时错误地传入了vector对象而非迭代器。)
java·c++·bug
Qiuner5 天前
历劫波,明真我——Debug Commune
ai·开源·bug·debug·信息差·信息·交流
川石课堂软件测试6 天前
什么是BUG,你对BUG的了解有多少?
android·linux·服务器·python·功能测试·bug·安全性测试
仰望星空的凡人7 天前
【BUG排查】基于RH850F1KMS1的主控出现系统中断错误,调试FEIC的值为0x11
单片机·bug·rh850·renesas