首页 > 其他分享 >uniapp directive 在原生 wgt 包不生效 uniapp directive 不生效

uniapp directive 在原生 wgt 包不生效 uniapp directive 不生效

时间:2023-04-23 15:34:20浏览次数:33  
标签:el style return directive uniapp auth value 生效

需求

  • 根据权限编码禁用按钮
  • 阻止当前 dom 绑定的点击事件,禁用状态(opacity 半透明?? 或者 display: none?? )

尝试

  • 开发环境用 Chrome 跑,一切正常,构建打包后去真机跑,按钮没控制住
  • (用 HBX -发行-原生应用 app 制作 wgt 包)开发环境: HBX: 3.7.9 系统: MacOS: 13.0.1 (Intel)
  • 通过 directive 绑定一个 v-auth 指令,在标签里 v-auth="’some auth code‘" 或者 v-auth="['code1', 'code2']"
  • directivebindinserted 两个钩子尝试过,最终确定为 el 在真机环境下,与开发环境的el 不是一个玩意

暂用平替方案

  • 全局 mixin 一个方法,判断权限后返回以控制当前 dom 是否可点击
// path/auth.js
function checkAuth(value) {
	if (
		value === "" ||
		(value instanceof Array && value.length === 0) ||
		!value
	) {
		return true;
	}
	const _value = [value].flat(); // 兼容入参为 string 和 array,拍平二维数组
	const authBtns = uni.getStorageSync("authBtns");
	if (authBtns === "*") return true;
	const hasPermission = _value.every((e) => authBtns.includes(e));
	return hasPermission;
}
const auth = {
	install(Vue) {
		// directive 在 app 下无法正常使用
		// Vue.directive("auth", {
		// 	bind(el, binding, vnode, oldVnode) {
		// 		if (!checkAuth(binding.value, el)) {
		// 			el.style.opacity = "0.3";
		// 			el.style.pointerEvents = "none";
		// 		}
		// 	},
		// 	inserted(el, binding, vnode, oldVnode) {
		// 		if (!checkAuth(binding.value, el)) {
		// 			el.style.opacity = "0.3";
		// 			el.style.pointerEvents = "none";
		// 		}
		// 	},
		// });
		// 平替方案
		Vue.mixin({
			methods: {
				$auth(val) {
					if (!checkAuth(val)) {
						return [{ opacity: "0.3", pointerEvents: "none" }];
					}
					return [];
				},
			},
		});
	},
};

// path/main.js
Vue.use(auth);
  • vue文件中
<view :style="$auth('AUTH_CODE')">没有权限 AUTH_CODE 别点我</view>
<view :style="$auth(['CODE1', 'CODE2'])">没有权限 CODE1&2 别点我</view>
// 多个行内 style 情况
<view :style="[...$auth('AUTH_CODE'), {color: 'green', fontSize: '22px', fontWeight: 600}]">没有权限 AUTH_CODE 别点我</view>

写在最后

官方 uni 文档写着支持 app 用 directive ,可能是我姿势不对,没用对吧。。

标签:el,style,return,directive,uniapp,auth,value,生效
From: https://www.cnblogs.com/PeiQi1229/p/17346687.html

相关文章

  • uniapp轮播图预览
    <swiper:indicator-dots="true":autoplay="true":interval="3000":duration="1000":circular="true"><!--把当前点击的图片的索引,传递到preview()处理函数中点击图片预览--><swiper-itemv-for="(item......
  • 【数据库,事务】【转载】@Transactional 踩坑记录(不生效,并发,回滚问题)
    原文:https://blog.csdn.net/JinglongSource/article/details/1050266651、@Transactional不生效?1.是否添加依赖?新项目经常会忘记添加各种依赖导致(Transactional依赖AOP实现,因此需要导入aop相关依赖)2.方法是否是公开的(pubilc)?(在idea里面,加事务注解的方法必须是pub......
  • mac M2 设置JAVA_HOME不生效
    1.打开终端2.如果不存在可以使用touch.bash_profile创建一个新文件3.复制一下内容,惟一要更改的是版本号open-e.bash_profileJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/HomePATH=$JAVA_HOME/bin:$PATH:.CLASSPATH=$JAVA_HOME/lib/tool......
  • Java8更新Java11, 修复使java11环境生效
     原因:jenkins安装新版本时发现不支持java8了,需要手动删除旧的8更新到11,再配置环境变量.报错:jenkins:invalidJavaversion:openjdkversion"1.8.0_312" 1.先卸载旧的java8dnfremovejava 2.安装装版本java11yuminstall-yfontconfigjava-11-openjdkjava-1......
  • vue-input-directive 插件的使用(已兼容vue3.0)
    codepen体验地址github地址安装、引入npminstallvue-input-directive--saveimportVuefrom'vue'importinputValidatefrom'vue-input-directive'Vue.use(inputValidate)1、d-input-max 输入数字限制最大值<el-inputv-d-input-max="99.99"v-......
  • 解决uniapp不显示showToast或一闪而过问题
    原因:showToast与其他方法冲突,以onLoad冲突为例第一种:将showToast与showLoading分开,放到mounted中mounted(){//判断是否登录 if(!this.hasLogin){ uni.showToast({ title:'登录过期', icon:'none' }) }},onLoad(option){ ......
  • uniapp计算属性和监听属性的使用及props验证
    计算属性:定义:computed:{变量名xx(){return计算的代码}} 使用: <p>乘以2的值为{{变量名xx()}}</p>监听属性:(普通监听:无法监听到第一次绑定的变化)定义: watch:{变量名xx(newName,oldName){console.log(可以打印新老数据)}}(普通监听:可监听到第一次绑定的变化)定......
  • uniapp h5与app接口路径
      h5版本前面带不带‘/’都不会报错接口路径拼接前应该有逻辑默认补'/'app后就会报错 ......
  • UE5 流送的子关卡中导航网格体不生效
    依次点击“编辑”—>“项目设置“—>“导航网格体”,将运行时生成(默认为静态)改为动态即可,如下所示: ......
  • centos7.6升级内核后不生效
    查看已升级完成内核:[root@centos76-649~]#awk-F\''$1=="menuentry"{print$2}'/etc/grub2.cfgCentOSLinux(5.12.12-1.el7.elrepo.x86_64)7(Core)CentOSLinux(3.10.0-957.el7.x86_64)7(Core)CentOSLinux(0-rescue-4cb870464ad646829ae3......