directive
绑定一个 v-auth
指令,在标签里 v-auth="’some auth code‘" 或者 v-auth="['code1', 'code2']"directive
的 bind
和 inserted
两个钩子尝试过,最终确定为 el
在真机环境下,与开发环境的el
不是一个玩意// 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);
<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 ,可能是我姿势不对,没用对吧。。