Nuxt3中写Vue自定义指令,以v-auth为例

背景

在后台管理系统中,常需要按钮级权限控制。在常见的访问控制RBAC 模型(用户、角色、权限)中,我们可能需要根据角色或权限来控制某个按钮的显示隐藏。

因此,我们期望使用以下方式来控制

// 单个角色
v-auth:role="'admin'"
// 多个角色
v-auth:role="['admin','manager']"
// 单个权限
v-auth:permission="'user_read'"
// 多个权限
v-auth:permission="['user_read','user_write']"

编写指令

在根目录下创建文件夹plugins,Nuxt会自动引入这个目录下的一级js文件,不需要在配置中引入。因此,我们可以创建一个auth.js文件。

// plugins/auth.js
export default defineNuxtPlugin((nuxtApp) => {
    // 不再是 import Vue from 'vue'的写法了
	nuxtApp.vueApp.directive('auth', {
        // 不用mounted,在mounted时用户权限集还是空的
		updated(el, {
			arg, // role | permission
			value, // string | array
		}) {
			if (typeof value == 'string') {
				value = [value];
			}

            // 用户信息,这里面有属性 role | permission
			const userInfo = useState('userInfo');
			const userAuth = userInfo.value?.[arg]; // 用户的角色|权限集

			if (!userAuth) {
				removeEl(el);
			}

			let hasAuth = false;
			for (const item of value) {
				if (userAuth.includes(item)) {
					// 用户拥有传入的权限
					hasAuth = true;
					break;
				}
			}

			if (!hasAuth) {
				removeEl(el);
			}
		}
	})
})

// 移除元素
const removeEl = (el) => el.parentNode && el.parentNode.removeChild(el);

使用指令

<button v-auth:role="'admin'">测试</button>

参考文档:

Vue 自定义指令

Nuxt plugins

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Nuxt3 中使用 Vue3-seamless-scroll 插件,你需要按照以下步骤进行: 1. 首先,安装 Vue3-seamless-scroll 插件,可以使用 npm 或者 yarn 来进行安装: ``` npm install vue3-seamless-scroll 或者 yarn add vue3-seamless-scroll ``` 2. 在 Nuxt3 中,你可以在 `nuxt.config.js` 中配置插件。在 `plugins` 配置项中添加以下代码: ```javascript import { createApp } from 'vue' import seamlessScroll from 'vue3-seamless-scroll' export default { plugins: [ { src: '~/plugins/vue3-seamless-scroll.js', ssr: false } ] } ``` 3. 在 `plugins` 目录下创建一个 `vue3-seamless-scroll.js` 文件,并添加以下代码: ```javascript import { createApp } from 'vue' import seamlessScroll from 'vue3-seamless-scroll' export default ({ app }) => { const app = createApp({}) app.use(seamlessScroll) app.mount('#app') } ``` 这个文件会在应用启动时被自动加载,并将 Vue3-seamless-scroll 插件注册到 Vue 实例中。 4. 最后,在你的组件中使用 Vue3-seamless-scroll,例如: ```html <template> <seamless-scroll> <div v-for="item in items" :key="item.id">{{ item.text }}</div> </seamless-scroll> </template> <script> export default { data() { return { items: [{ id: 1, text: 'item 1' }, { id: 2, text: 'item 2' }, { id: 3, text: 'item 3' }] } } } </script> ``` 在这个例子中,我们将 `seamless-scroll` 组件包裹了一个 `div`,并使用 `v-for` 渲染了多个子组件。这些子组件会在容器中无缝滚动显示。 这样就完成了在 Nuxt3 中使用 Vue3-seamless-scroll 插件的配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值