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

文章目录

    • vue 项目中 怎么实现权限管理,要求控制到按钮级别的权限
    • vue 项目中怎么划分结构和划分组件比较合理
    • vue 什么是虚拟dom,如何实现一个虚拟dom
    • vue中observer 是什么
    • vue中$nextTick 有什么作用
    • $nextTick 怎么做到 DOM 更新过程全部完成后 才操作的
    • vue中 key的应用原理
    • vue中常用的修饰符有哪些,分别有什么应用场景
    • vue 响应式开发比命令式开发相比,有哪些优势
    • vue中 $router 和 $router 有什么区别,应该怎么理解应用
    • React 与 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来实现购物车中的添加商品、删除商品等按钮操作,同时包含与购物车业务相关的逻辑,如计算总价、更新商品数量等。
    • 优点
      • 提高组件的复用性。基础组件可以在多个业务组件或者页面中使用,减少代码重复编写。
      • 便于维护和更新。当需要修改基础组件的样式或者功能时,只需要在基础组件文件夹中进行修改,所有使用该基础组件的地方都会受到影响。而业务组件的修改主要集中在业务逻辑相关的部分,不会干扰基础组件的正常使用。

vue 什么是虚拟dom,如何实现一个虚拟dom

  1. 什么是虚拟DOM(Virtual DOM)
  • 定义:虚拟DOM是一种编程概念,它是真实DOM的JavaScript对象表示。它以对象树的形式来模拟DOM结构,这个对象树包含了标签名、属性、子节点等信息,就像一个DOM结构的轻量级副本。
  • 示例
    • 对于以下HTML结构:
    <div id="app"><h1>Hello, Vue!</h1><p>Some text here.</p>
    </div>
    
    • 其虚拟DOM可以表示为(简化的JavaScript对象形式):
    {tag: 'div',attrs: {id: 'app'},children: [{tag: 'h1',children: ['Hello, Vue!']},{tag: 'p',children: ['Some text here.']}]
    }
    
  • 作用原理
    • 当应用中的数据发生变化时,Vue(或其他使用虚拟DOM的框架&#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461375.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础(8)异常

目录 1.前言 2.正文 2.1异常的引入 2.2异常的类型 2.2.1编译时异常 2.2.2运行时异常 2.3区分Exception与Error 2.4异常的声明&#xff0c;抛出与捕获 2.4.1throw 2.4.2throws 2.4.2try-catch与finally 2.6自定义异常 3.小结 1.前言 哈喽大家好啊&#xff0c;Java…

解决rabbitmq-plugins enable rabbitmq_delayed_message_exchange :plugins_not_found

问题&#xff1a;我是在docker-compose环境部署的 services:rabbitmq:image: rabbitmq:4.0-managementrestart: alwayscontainer_name: rabbitmqports:- 5672:5672- 15672:15672environment:RABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./rabbitmq/…

JavaScript语法基础——变量,数据类型,运算符和程序控制语句(小白友好篇,手把手教你学会!)

一、JavaScript概述 JavaScript是一种高级编程语言&#xff0c;常用于网页开发和服务器端应用程序。它是一种动态类型语言&#xff0c;可以在浏览器中直接解释执行&#xff0c;而不需要编译。 脚本&#xff08;Script&#xff09;是一种与计算机程序相关的指令集或代码块&…

Android 中View.post的用法

View.post 是 Android 中 View 类的一个方法&#xff0c;它允许我们在视图 (View) 完成其布局 (Layout) 阶段后&#xff0c;将一个任务放到主线程的消息队列中&#xff0c;以便稍后执行。这种方式通常用于确保在 View 的尺寸、位置等布局属性已经计算完成后执行某些操作。 基本…

健康之路押注医药零售:毛利率下滑亏损扩大,医疗咨询人次大幅减少

《港湾商业观察》黄懿 2024年9月13日&#xff0c;健康之路股份有限公司&#xff08;下称“健康之路”&#xff09;再次递表港交所&#xff0c;建银国际为独家保荐人。健康之路国内运营主体为健康之路&#xff08;中国&#xff09;信息技术有限公司和福建健康之路信息技术有限公…

在pycharm中使用sqllite

在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它设计用于嵌入到应用程序中&#xff0c;并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持&#xff0c;允…

游戏启动失败:8种修复xinput1_3.dll错误的几种方法教程,轻松解决xinput1_3.dll错误

当你准备好在一天的工作后放松一下&#xff0c;启动你最爱的游戏&#xff0c;却突然收到一个“xinput1_3.dll 丢失”的错误消息&#xff0c;这无疑是令人沮丧的。幸运的是&#xff0c;xinput1_3.dll丢失问题通常可以通过几个简单的步骤来解决。本文将详细介绍这些步骤&#xff…

多线程和线程同步基础篇学习笔记(Linux)

大丙老师教学视频&#xff1a;10-线程死锁_哔哩哔哩_bilibili 目录 大丙老师教学视频&#xff1a;10-线程死锁_哔哩哔哩_bilibili 线程概念 为什么要有线程 线程和进程的区别 在处理多任务的时候为什么线程数量不是越多越好? Linux提供的线程API 主要接口 线程创建 pth…

DDRPHY数字IC后端设计实现系列专题

在对 LPDDR3 物理层接口模块进行后端设计之前&#xff0c;需要对该模块的功能结 构以及后端物理设计流程的相关理论进行深入的分析和研究。本章第一节详细分 析了本次 LPDDR3 物理层接口模块的结构&#xff0c;为该模块的布图布局的合理规划奠 定了理论基础&#xff0c;并且分析…

【笔记】数据结构与算法

参考链接&#xff1a;数据结构(全) 参考链接&#xff1a;数据结构与算法学习笔记 一些PPT的整理&#xff0c;思路很不错&#xff0c;主要是理解角度吧&#xff0c;自己干啃书的时候结合一下会比较不错 0.总论 1.数据 注&#xff1a;图是一种数据结构&#xff01;&#xff01;…

无人机救援系统基本组成

无人机救援系统基本组成 1. 源由2. 组成2.1 无人机载具2.1.1 多旋翼2.1.2 垂起固定翼2.1.3 智能避障2.1.4 物资投递 2.2 智能吊舱2.2.1 云台2.2.2 高清摄像2.2.3 红外热成像2.2.4 激光测距2.2.5 目标跟踪 2.3 通讯链路2.3.1 超长距离通信2.3.2 长距离通信2.3.3 中等距离通信 2.…

拍拍贷鸿蒙版H5容器之路

背景介绍 业务背景 2024年1月18日华为宣布&#xff1a;HarmonyOS NEXT 将不再支持 Android系统&#xff0c;基于以上背景及国内信贷业务现状&#xff0c;公司决定启动借款App鸿蒙化项目。 下图是2024年6月华为HDC大会上&#xff0c;华为宣布 HarmonyOS NEXT 将面向开发者和先…

微信小程序服务通知

项目中用到了小程序的服务消息通知&#xff0c;通知订单状态信息&#xff0c;下边就是整理的一下代码&#xff0c;放到项目中&#xff0c;把项目的小程序appid和小程序的secret写进去&#xff0c;直接运行即可 提前申请好小程序服务信息通知短信模板&#xff0c;代码需要用到模…

3000字帮你彻底搞懂Java抽象类与接口的区别(含JDK8接口新增三种方法与丰富案例)

Java-OOP 1-Final 1.1简介 final关键字是最终的意思&#xff0c;可以修饰&#xff1a;类、方法、变量。 修饰类&#xff1a;该类被成为最终类&#xff0c;特点是不能被继承了。修饰方法&#xff1a;该方法被称为最终方法&#xff0c;特点是不能被重写了。修饰变量&#xff…

有没有噪音低的宠物空气净化器推荐?希喂、IAM性能PK

有一说一&#xff0c;随着清洁家电市场的不断发展&#xff0c;市面上的各种清洁家电品类也是越来越多&#xff0c;像是吸尘器、洗地机、扫地机等等这些产品估计大家都很熟悉了。 但&#xff01;如果你家也跟我家一样也是养了几只猫猫狗狗&#xff0c;那你就会发现到&#xff0…

vscode摸鱼学习插件开发

不知道大家在摸鱼的时候&#xff0c;会不会想要学习&#xff1f; 或者有没有考公人&#xff0c;下班要学习的&#xff1f; 上班时间摸鱼&#xff0c;下班时间不够学习&#xff1f; 为此&#xff0c;我决定开发一个vscode插件&#xff0c;来刷粉笔题 粉笔插件名称&#xff1a;…

hive将包含逗号的字段拆分为多列

目录 一、概述 二、行动 1.准备数据 2.数据清洗 3.substring_index函数 4.split函数实现 一、概述 想将hive表中包含逗号的字段按逗号做分隔符进行分列操作 二、行动 1.准备数据 --1 select {1,2,3,4,5,6,7,8} as num_str --使用的数据2.数据清洗 --2 select num_s…

文心一言 VS 讯飞星火 VS chatgpt (381)-- 算法导论24.5 1题

一、给出图24-2的与图中两棵最短路径树不同的另外两棵最短路径树。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在图论中&#xff0c;最短路径树&#xff08;Shortest Path Tree, SPT&#xff09;是一种从单个源点到所有其他节点的最短路径形成的树。给定一个…

故障诊断 | MTF-TLSSA-DarkNet-GRU-MSA迁移学习故障识别程序(t分布+莱维飞行改进麻雀优化)

故障诊断 | 故障诊断实例代码 目录 故障诊断 | 故障诊断实例代码效果一览基本介绍程序设计参考资料 效果一览 基本介绍 利用了迁移学习和多项技术改进&#xff0c;包括麻雀搜索法、DarkNet19、GRU、多头注意力机制等&#xff0c;以提高故障识别的准确性和效率 模型框架&#x…

在Bash脚本中 set -e 是什么意思

问题 我正在研究这个预安装(preinst)脚本的内容&#xff0c;该脚本会在从 Debian 软件包(.deb)文件解压该包之前执行。 脚本包含以下代码&#xff1a; #!/bin/bash set -e # Automatically added by dh_installinit if [ "$1" install ]; thenif [ -d /usr/share…