Vue3自定义指令directive(如权限控制)
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
1.创建src/directives/index.ts文件
//@ts-nocheck
import { Directive } from "vue";
import { permission } from "@/directives/permission.ts";
const allGlobalDirectives = { permission };
// console.log(allGlobalDirectives, "allGlobalDirectives"); //打印发现是导出的自定义指令名,permission
export default {
install(app) {
Object.keys(allGlobalDirectives).forEach(key => { //Object.keys() 返回一个数组,值是所有可遍历属性的key名
app.directive(key, (allGlobalDirectives as { [key: string]: Directive })[key]); //key是自定义指令名字;后面应该是自定义指令的值,值类型是string
});
}
};
2.创建src/directives/permission.ts文件
import type { DirectiveBinding } from 'vue'
export const permission = (el: HTMLElement, binding: DirectiveBinding) => {
// value 获取用户使用自定义指令绑定的内容
const {value} = binding;
// 获取用户所有的权限按钮
// const permissionBtn = sessionStorage.getItem("permission");
const permissionBtn = ["user.add23"];
// 判断用户使用自定义指令,是否使用正确了
if (value && value instanceof Array && value.length > 0) {
const permissionFunc = value;
//判断传递进来的按钮权限,用户是否拥有
//Array.some(), 数组中有一个结果是true返回true,剩下的元素不会再检测
const hasPermission = permissionBtn.some((role: any) => {
return permissionFunc.includes(role);
});
console.log("hasPermission", value, hasPermission);
// 当用户没有这个按钮权限时,设置隐藏这个按钮
if (!hasPermission) {
el.style.display = "none";
}
} else {
throw new Error("need roles! Like v-permission=\"['admin','editor']\"");
}
};
3.main.ts引入
// 引入自定义插件对象:注册全局组件
import globalDirectives from "@/directives/index.ts";
const app = createApp(App);
// 安装自定义指令
app.use(globalDirectives);
app.mount("#app");
4.页面中使用
<span v-permission="['user.add']" class="padding-right-20">测试</span>
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)