uni-app 打包 app ,自定义指令中删除节点信息失败
Opened this issue · 3 comments
monkeying-boy commented
发行方式
App
具体平台
安卓12
开发环境
Windows
项目创建方式
HBuilderX
依赖版本
hbuildx:4.76
package.json 如下
{
"name": "app",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@vant/area-data": "^2.0.0",
"dayjs": "^1.11.13",
"h5plus-hotfix": "^1.0.2",
"image-tools": "^1.4.0",
"jquery": "^3.6.1",
"mathjs": "^11.8.0",
"uview-ui": "^1.8.4"
}
}
问题描述
本地运行 app 在模拟器中打开,控制台没有报错信息,但是自定义指令没有生效,感觉可能是 没有正确的将 dom 节点删除
重现步骤
项目是vue2,打包成 app 后打开项目发现自定义指令没有生效,在 h5 模式下运行也是没有问题的,然后排查了一下是自定义指令拿到的 el 执行removeChild 函数好像没有真的删除掉节点。
自定义指令逻辑:判断是否有权限没有权限则删除 dom
本地运行到模拟器中 hbuilderx 控制台没有报错信息,并且正确的运行完了代码,但是页面上的节点没有被删除
指令代码如下:
inserted(el, binding, vnode) {
const { value } = binding
const all_permission = "*:*:*";
const permissions = store.getters && store.getters.permissions
if (value && Array.isArray(value) && value.length > 0) {
const permissionFlag = value
const hasPermissions = permissions.some(permission => {
return all_permission === permission || permissionFlag.includes(permission)
})
console.log('是否有权限',hasPermissions)
if (!hasPermissions) {
// 执行到这里了
el.parentNode && el.parentNode.removeChild(el)
console.log('执行成功')
}
} else {
throw new Error(`请设置操作权限标签值`)
}
}
期望行为
No response
实际行为
No response
截图或录屏
No response
monkeying-boy commented
我发现有一个奇怪的现象,使用自定义指令如果没有权限 执行了 el.parentNode.removeChild(el) 那对应节点的 点击事件是不会执行,控制台也没有报错。即使把 el.parentNode.removeChild(el) 改成 el.destroy() 也不能正确将节点销毁
Otto-J commented
提供复现工程,说明 vue 版本。
简化你的业务逻辑,说明你的代码执行到哪里了,你的几个 log 是否打印了表达并不清晰。
monkeying-boy commented
提供复现工程,说明 vue 版本。
简化你的业务逻辑,说明你的代码执行到哪里了,你的几个 log 是否打印了表达并不清晰。
提供了一个可以复现的 demo,在 h5 环境和 app 环境表现不一致, h5 正常,app 有问题。项目是重新搭建的使用的 vue2