【面试题】 常问 路由权限控制怎么做?

权限控制分为三大块:

路由权限、菜单权限、按钮权限


路由权限

  •  前端路由维护了两份路由表(静态路由表,也就是所有的人都可以看到的,直接在路由实例router上面挂载,还有一份动态路由表要根据用户当前权限动态筛选addRoutes添加上去的)
  • 用户只能看到自己有权限访问的页面,如果访问不是自己能看到的页面就是404 不同的账号能看到的页面不一样,有的能看到全部,有的只能看到部分

菜单权限

  • 后台左侧侧边栏导航是v-for动态渲染出来 有的用户能看到所有的菜单 有的只能看到部分
  • 菜单是根据当前用户自己的路由表来v-for动态渲染出来

按钮权限

  • 某个页面上有新增、删除、修改按钮,不同的账号登录之后有的可以操作所有的功能,有的只能新增 (一种思路是disabled,还有一种思路隐藏)
  • 登录成功会得到一份权限点列表,里面记录了各个页面上面的按钮能不能操作的标识,我们可以定义一个mixin混入,在里面定义一个方法,用于判断当前这个页面上面某个按钮的权限点是不是在权限点列表中,如果是这个按钮是启用或者显示,如果不是,这个按钮就禁用或隐藏
<think>嗯,用户问的是Vue的高频面试题有哪些,我需要整理一下常见的题目。首先,我应该从基础开始,比如Vue的核心特性,比如数据绑定、组件化这些。然后生命周期钩子,每个阶段做什么的,可能被问到。 接下来,双向数据绑定原理,这个肯定会被问,得详细讲讲Object.defineProperty和Proxy的区别,以及Vue3为什么换成了Proxy。然后组件通信方式,父子、子父、兄弟组件,还有Vuex和事件总线,可能还要提一下provide/inject。 然后是计算属性和方法的区别,watch和computed的不同使用场景。Vue Router的问题,比如路由模式hash和history,导航守卫有哪些。Vuex的核心概念,state、mutations这些,以及和Pinia的区别。 还有Vue3的新特性,Composition API、响应式变化、Teleport这些。虚拟DOM和diff算法也是常问的,可能让解释key的作用。性能优化方面,懒加载、keep-alive、代码分割这些方法。 项目相关的问题,比如如何处理错误、权限控制,SSR和Vue的整合。然后是一些原理性的问题,比如nextTick的作用,响应式系统的实现,数据更新后的DOM更新流程。 可能还需要包括一些对比题,比如Vue和React的区别,v-show和v-if的区别,以及一些指令的使用,如v-model的实现。还有插槽的作用,作用域插槽的用法。 要确保覆盖全面,分门别类,让读者容易查找。可能用户是准备面试,需要全面且重点突出的内容,所以要结构清晰,每个点简明扼要。还要检查是否有遗漏的高频问题,比如Vue3的组合式API和Options API的区别,或者Tree-shaking改进等新特性。</think>以下是 Vue 的高频面试题整理,涵盖基础、进阶和原理等方向,帮助系统化准备面试: --- ### **一、Vue 基础** 1. **Vue 的核心特性是什么?** - 数据驱动(响应式)、组件化、模板语法、指令系统、轻量高效。 2. **Vue 生命周期钩子及作用** - `beforeCreate`/`created`、`beforeMount`/`mounted`、`beforeUpdate`/`updated`、`beforeUnmount`/`unmounted`(Vue3)等,重点掌握各阶段适合的操作(如数据初始化、DOM 操作、资源清理)。 3. **v-if 和 v-show 的区别** - `v-if` 条件渲染(销毁/创建组件),`v-show` 切换 CSS `display` 属性(适合频繁切换)。 4. **v-for 中为什么需要 key?** - 为虚拟 DOM 提供唯一标识,优化 diff 算法效率,避免渲染错误。 5. **组件通信方式** - 父子:`props` + `$emit` - 子父:自定义事件(`$emit`) - 兄弟/跨级:事件总线(Event Bus)、Vuex/Pinia、`provide/inject`。 --- ### **二、Vue 进阶** 1. **Vue 双向绑定原理(数据劫持)** - Vue2:`Object.defineProperty` 劫持对象属性,通过 getter/setter 监听变化。 - Vue3:Proxy 代理整个对象,支持动态新增属性和数组索引修改。 2. **计算属性(computed) vs 方法(methods)** - 计算属性基于依赖缓存,依赖不变时直接返回缓存值;方法每次调用重新计算。 3. **watch 和 watchEffect 的区别(Vue3)** - `watch` 需指定监听对象和回调,`watchEffect` 自动追踪依赖并立即执行。 4. **Vue Router 核心** - 路由模式:`hash`(`#`)、`history`(需服务端支持)。 - 导航守卫:`beforeEach`、`beforeResolve`、`afterEach` 等控制路由跳转。 5. **Vuex 的核心概念** - `state`(状态)、`mutations`(同步修改)、`actions`(异步提交 mutations)、`getters`(计算属性)。 - Vue3 推荐使用 Pinia(更简洁的 API,支持 Composition API)。 --- ### **三、Vue3 新特性** 1. **Composition API vs Options API** - Composition API 通过 `setup()` 函数组织逻辑,提高代码复用性和可读性(尤其复杂组件)。 2. **响应式系统的升级** - 使用 `ref`(基本类型)和 `reactive`(对象)替代 Vue2 的 `data`,基于 Proxy 实现。 3. **新组件和 API** - `<Teleport>`(传送组件)、`<Suspense>`(异步组件加载状态)、`v-model` 支持多个绑定等。 4. **性能优化** - Tree-shaking 支持(按需引入)、静态节点提升(减少重渲染)、Diff 算法优化。 --- ### **四、原理与优化** 1. **虚拟 DOM 和 Diff 算法** - 通过 JS 对象模拟真实 DOM,减少直接操作 DOM 的开销。Diff 算法对比新旧节点差异,局部更新。 2. **nextTick 的作用** - 在下次 DOM 更新循环后执行回调,用于获取更新后的 DOM 状态。 3. **Vue 的模板编译过程** - 模板 → AST(抽象语法树) → 优化(静态标记) → 生成 render 函数。 4. **性能优化手段** - 代码分割(路由懒加载)、`keep-alive` 缓存组件、避免 v-if 和 v-for 共用、使用 `v-once` 等。 --- ### **五、高频实战问题** 1. **如何实现权限控制?** - 路由守卫验证角色权限,动态渲染菜单或组件。 2. **如何处理异步加载数据?** - 在 `created` 或 `mounted` 中调用 API,结合 `async/await` 或 Promise。 3. **Vue 如何实现 SSR(服务端渲染)?** - 使用 Nuxt.js 框架,解决 SEO 和首屏加载问题。 4. **Vue 和 React 的区别?** - 模板 vs JSX、响应式实现(Proxy vs 状态管理)、生态差异等。 --- ### **六、代码示例** ```javascript // Vue3 Composition API import { ref, reactive, computed } from 'vue'; export default { setup() { const count = ref(0); const state = reactive({ name: 'Vue3' }); const doubleCount = computed(() => count.value * 2); return { count, state, doubleCount }; } }; ``` --- 掌握以上内容后,建议结合项目经验准备具体案例,深入理解 Vue 的设计哲学和实际应用场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值