当前位置: 首页 > news >正文

vue 项目情景应用+深度理解+面试高频题

文章目录

    • vue 项目中 怎么实现权限管理,要求控制到按钮级别的权限
    • vue 项目中怎么划分结构和划分组件比较合理
    • vue 什么是虚拟dom,如何实现一个虚拟dom
    • vue中observer 是什么
    • vue中$nextTick 有什么作用
    • $nextTick 怎么做到 DOM 更新过程全部完成后 才操作的
    • vue中 key的应用原理
    • vue中常用的修饰符有哪些,分别有什么应用场景

vue 项目中 怎么实现权限管理,要求控制到按钮级别的权限

  1. 后端设计权限数据结构
    • 在后端数据库中,需要设计权限相关的数据表。通常会有用户表(users)、角色表(roles)和权限表(permissions)。
    • 用户表存储用户的基本信息,如用户名、密码等,并且有一个字段关联到角色表,例如role_id
    • 角色表包含角色名称等信息,并且有一个多对多的关系表来关联权限表。
    • 权限表存储权限的详细信息,如权限名称(permission_name)、权限标识(permission_key)等。权限标识可以是一个唯一的字符串,用于前端识别,比如add_user(添加用户权限)、edit_user(编辑用户权限)等。
  2. 后端接口提供权限数据
    • 后端需要提供接口,当用户登录时,根据用户的角色获取该用户所拥有的所有权限列表。这个权限列表可以是一个包含权限标识的数组,例如["add_user", "view_report"]
    • 这个接口可以是一个/api/user/permission的RESTful API,前端在用户登录成功后调用这个接口来获取权限数据。
  3. 前端存储权限数据
    • 在Vue项目中,可以使用Vuex来存储权限数据。在store文件夹下创建一个permission.js文件(如果使用Vuex)。
    • 当获取到后端返回的权限列表后,将其存储在Vuexstate中。例如:
    const state = {permissions: []
    };
    const mutations = {SET_PERMISSIONS(state, permissions) {state.permissions = permissions;}
    };
    const actions = {setPermissions({ commit }, permissions) {commit('SET_PERMISSIONS', permissions);}
    };
    export default {state,mutations,actions
    };
    
  4. 全局指令控制按钮显示
    • 创建一个全局指令来控制按钮的显示与否。在main.js文件中:
    import Vue from 'vue';
    Vue.directive('permission', {inserted: function (el, binding) {const permissions = store.state.permissions;if (permissions.indexOf(binding.value) === -1) {el.style.display = 'none';}}
    });
    
    • 这样,在模板中可以使用这个指令来控制按钮。例如,有一个添加用户的按钮,只有拥有add_user权限的用户才能看到:
    <button v - permission="add_user">添加用户</button>
    
  5. 路由级别的权限控制(可选)
    • 对于一些页面级别的权限控制,可以在路由配置中进行。在router.js文件中,为每个路由添加一个meta字段来定义该路由所需的权限。
    const routes = [{path: '/admin/user/add',name: 'AddUser',component: AddUser,meta: {requiresAuth: true,permission: 'add_user'}}
    ];
    
    • 然后在路由导航守卫中进行权限检查。例如:
    router.beforeEach((to, from, next) => {if (to.meta.requiresAuth) {const permissions = store.state.permissions;if (permissions.indexOf(to.meta.permission)!== -1) {next();} else {next('/403');//跳转到403无权限页面}} else {next();}
    });
    

通过以上步骤,可以在Vue项目中实现按钮级别的权限管理,同时也可以对页面进行权限控制。这种方式结合了后端的权限数据提供和前端的灵活显示控制,有效地管理用户在系统中的操作权限。

vue 项目中怎么划分结构和划分组件比较合理

  1. 按功能模块划分

    • 描述:将项目按照不同的功能模块进行划分,每个模块包含相关的组件、视图、服务和样式。例如,一个电商项目可以划分为用户模块、商品模块、订单模块等。
    • 示例
      • src目录下创建modules文件夹,里面分别有userproductorder等子文件夹。
      • user文件夹下可以包含UserLogin.vue(用户登录组件)、UserRegister.vue(用户注册组件)、UserProfile.vue(用户信息组件)等相关组件,以及对应的user.service.js(用于用户相关的API调用服务)和user.module.css(用户模块样式文件)。
    • 优点
      • 功能职责明确,开发人员可以专注于一个模块的开发,便于团队协作。不同的开发人员可以负责不同的模块,减少代码冲突的可能性。
      • 易于维护和扩展。当需要添加新功能或者修改某个模块的功能时,只需要在对应的模块文件夹中进行操作,不会影响到其他模块。
  2. 按页面划分

    • 描述:对于页面较为复杂,且页面之间差异较大的项目,可以按照页面来划分组件。每个页面作为一个独立的单元,包含该页面所需的所有组件和资源。
    • 示例
      • src目录下创建pages文件夹,里面有HomePage.vue(首页组件)、ProductDetailPage.vue(商品详情页组件)、CheckoutPage.vue等。
      • ProductDetailPage.vue为例,它可能包含ProductImage.vue(商品图片组件)、ProductDescription.vue(商品描述组件)、ProductReviews.vue(商品评价组件)等子组件。同时,这个页面也有自己的样式文件和可能需要的服务来获取商品详情数据。
    • 优点
      • 与项目的页面架构直接对应,便于理解项目的整体页面布局。在进行页面设计和开发时,可以快速定位到相关的组件和资源。
      • 适合于以页面展示为主的项目,能够有效提高页面开发的效率,并且可以根据不同的页面需求灵活地调整组件的组合和样式。
  3. 基础组件和业务组件划分

    • 描述:将组件分为基础组件和业务组件。基础组件是具有通用性、不依赖于特定业务逻辑的组件,如按钮、输入框、下拉菜单等。业务组件是与具体业务功能相关的组件,如购物车组件、订单列表组件等。
    • 示例
      • src目录下创建components文件夹,里面分为basebusiness两个子文件夹。
      • base文件夹中可以有BaseButton.vue(基础按钮组件)、BaseInput.vue(基础输入框组件)等。这些组件可以通过props接收属性,如按钮的文本、颜色,输入框的类型等,并且具有良好的通用性。
      • business文件夹中包含BusinessCart.vue(购物车业务组件),它可能会调用BaseButton.vue来实现购物车中的添加商品、删除商品等按钮操作,同时包含与购物车业务相关的逻辑,如计算总价、更新商品数量等。
    • 优点
      • 提高组件的复用性。基础组件可以在多个业务组件或者页面中使用,减少代码重复编写。
      • 便于维护和更新。当需要修改基础组件的样式或者功能时,

http://www.mrgr.cn/news/59705.html

相关文章:

  • 二十二、Python基础语法(模块)
  • 社交媒体视频素材平台推荐
  • 深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
  • Aptos Move 模块的发布与交互:完整指南
  • MySQL COUNT(*)、COUNT(1)、COUNT(id)、COUNT(字段)效果及性能
  • Spring WebFlux学习笔记(一)
  • 海洋生物图像分割系统:算法改进策略
  • 习题2.40
  • 群控系统服务端开发模式-应用开发-业务架构逻辑开发API准备工作
  • D. Skipping 【 Codeforces Round 980 (Div. 2)】
  • 用Pycharm 运行深度学习,在测试(推理)运行测试文件会自动进入pytest模式,如何关闭默认测试框架
  • LVGL _基础控件_Label 文本
  • 《C++显式类型转换:解析多种转换方式的奥秘》
  • Docker | images镜像的常用命令总结
  • AI提示词工程优化Prompt-GPT使用手册(科普一键收藏史上最强攻略)
  • 【jvm】新生代和老年代
  • 【anki】如何图片遮挡分组
  • 数学建模学习(131):使用Python基于VIKOR算法的多准则决策分析
  • 【原创】红米K40(alioth)解锁BL,安装Magisk获取root权限并安装LSPosed模块
  • 实时操作系统(RTOS)深度解析及Java实现初探
  • windows@快速安装windows系统镜像安装@快速部署windows操作系统
  • Python爬虫-汽车投诉排行榜单数据
  • DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析
  • 三菱FX5UPLC 安全功能
  • ‌AI智能批量撰写文章,轻松通过AI检测,站长内容更新必备神器
  • C++学习路线(二十六)