详解vue + vuex + directives实现权限按钮的思路


Posted in Javascript onOctober 24, 2017

遇到了一个业务场景:

某个按钮按下去之前需要先判断它是否登陆,如果没有登陆需要跳转到对应的登陆页面,否则就继续该按钮之后的操作。

对于这种问题,很显然不能每个按钮都去判断,所以我思考了一下结合自定义指令和vuex完成了相应的实现。

主要的代码实现

const directive = Vue.directive('permission-click', {
 bind: (el, binding, vnode) => {
  el.addEventListener('click', (e) => {
   if (!store.getters.isLogin) {
    store.dispatch('showLogin')
   } else {
    typeof binding.value === 'function' && binding.value()
   }
  })
 }
})

这里封装了一个自定义指令,添加了一个点击事件,对于已经登陆的则调用传进来的函数,否则通过vuex去控制登陆(此处的登陆是通过弹窗实现的)

自定义组件使用的时候也极为简单

<div class="" v-permission-click="doSomething">
 ...
</div>

vuex里面的showLogin这个action无非就是对login的显示隐藏flag的操作。

这里只是完成了简单的登陆权限控制,从登陆权限出发,可以加入更多的权限控制,比如根据role角色判断,然后可以全局地控制权限,且实现起来极为精简。

Github: github.com/lyh2668

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Display SQL Server Version Information
Jun 21 Javascript
javascript 定义初始化数组函数
Sep 07 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
jQuery实现的网页左侧在线客服效果代码
Oct 23 Javascript
全面详细的jQuery常见开发技巧手册
Feb 21 Javascript
详解Angularjs中的依赖注入
Mar 11 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
Feb 02 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
Jun 26 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 Javascript
React Native实现地址挑选器功能
Oct 24 #Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 #Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 #Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 #Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 #Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 #Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 #Javascript
You might like
PHP5 字符串处理函数大全
2010/03/23 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
php读取csc文件并输出
2015/05/21 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
PHP多进程简单实例小结
2019/11/09 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Python 实现简单的电话本功能
2015/08/09 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
python要安装在哪个盘
2020/06/15 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
银行实习自我鉴定
2013/10/12 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
宣传活动总结范文
2014/07/01 职场文书
实习班主任自我评价
2015/03/11 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电
vue router 动态路由清除方式
2022/05/25 Vue.js