vue面试题

Vue面试题

一、Vue的生命周期

1、什么是vue生命周期

​ Vue实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂在Dom→渲染、更新→渲染、销毁等一系列过程,称之为Vue的生命周期

2、vue生命周期的作用是什么

​ 生命周期中有多个时间钩子,可以让我们在控制整个Vue实例的过程时更容易的形成逻辑

3、vue生命周期总共分为几个阶段

​ 总共分为8个阶段:beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)、beforeUpdate(更新前)、uppdated(更新后)、beforeDestroy(销毁前)、destroyed(销毁后),之后还有如果多次出现销毁创建同一个组件,那么用<keep-alive></keeplive>可以把它缓存到内存中,也可以利用activated deactivated来激活或者停用组件,来控制组件状态

4、第一次页面加载会触发生命周期的哪几个阶段

​ 会触发beforeCreate(创建前)、created(创建后)、beforeMount(载入前)、mounted(载入后)这几个阶段

5、请列举出3个Vue中常用的生命周期钩子函数

created: 实例已经创建完成之后调用

watch: 事件回调

activated: keep-alive组件激活时调用

二、Vue组件及封装

1、vue父子组件之间的传值

​ 子组件通过props方法接受父组件传来的值,子组件通过$emit方法来向父组件发送数据

2、vue组件的好处

​ 组件可以提升整个项目的开发效率。能够把页面抽象成多个相对独立的模块,解决了 传统项目开发中:效率低、难维护、复用性等问题

3、封装vue的过程

​ 使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件。子组件需要数据,可以在props中接受定义。子组件修改好数据后,可以采用$emit方法传递给父组件

4、vue的优点
  • 低耦合:视图(View)可独立于Model变化和修改
  • 可重用性:可以把一些相同的视图逻辑放在一个ViewModel中,让多个view重用这段视图逻辑
  • 独立开发:开发人员可专注于业务逻辑和数据的开发
  • 可测试:测试可针对ViewModel来写

三、Vue的路由实现

1、vue路由实现的模式

hash模式和history模式

hash模式:在浏览器中符号"#",#及#后面的字符称之为hash,用window.location.hash读取

​ 特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重载页面

history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录站进行修改,以及popState事件的监听到状态变更

2、嵌套路由怎么定义

当有多层组件嵌套的时候,可以考虑嵌套路由实现

因此我们需要在 VueRouter 的参数中使用 children 配置,这样就可以很好的实现路由嵌套。
可能还会问如何实现重定向: 使用redirect配置

四、Vuex面试相关

1、vuex是什么?怎么使用?哪种功能场景使用它

​ vuex是vue框架中的状态管理;改变状态的方式是提交mutations,这个是同步的事务;异步逻辑应该封装在action中

​ 在main.js中引入store,注入。新建一个目录store,…export(导出)

​ 场景使用:单页应用中,组件之间的状态、影月播放、登陆状态、加入购物车

2、vuex中有哪几种属性

​ 有5种,分别是state、mutations、actions、modules、getters

state: vuex使用单一状态树,即每个应用将仅仅包含一个store实例,但单一状态树和模块化并不冲突,存放的数据状态,不可以直接修改里面的数据

mutations: mutations定义的方法动态修改Vuex的store中的状态或数据

actions:可以理解为异步操作mutations中的数据

modules:项目特别复杂时,可以让每一个模块拥有自己的state、mutations、actions、getters,使得结构变得清晰,方便管理

getters: 过滤一些数据,让state中的数据复杂化

五、vue-cli如何新增自定义指令

1、创建局部指令
var app = new Vue({
    el: '#app',
    data: {    
    },
    // 创建指令(可以多个)
    directives: {
        // 指令名称
        dir1: {
            inserted(el) {
                // 指令中第一个参数是当前使用指令的DOM
                console.log(el);
                console.log(arguments);
                // 对DOM进行操作
                el.style.width = '200px';
                el.style.height = '200px';
                el.style.background = '#000';
            }
        }
    }
})
2、全局指令
Vue.directive('dir2', {
    inserted(el) {
        console.log(el);
    }
})
3、指令的使用
<div id="app">
    <div v-dir1></div>
    <div v-dir2></div>
</div>

六、vue指令

1、v-if 和 v-show 区别

​ v-if按照条件是否渲染,可以在内存中直接销毁;v-show是用css样式中的display属性来控制

2、vue几种常用指令

​ v-for、v-if、v-show、v-bind、v-on、v-moudle

3、为什么避免 v-if 和 v-for 用在一起

​ 当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,通过v-if 移动到容器元素,不会再重复遍历列表中的每个值。取而代之的是,我们只检查它一次,且不会在 v-if 为否的时候运算 v-for。

七、axios和ajax的区别:

区别: axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样。 简单来说: ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装。 axios是ajax ajax不止axios。

axios:用于浏览器和node.js的基于Promise的HTTP客户端

  • 从浏览器制作XMLHttpRequests
  • 让HTTP从node.js的请求
  • 支持Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换为JSON数据
  • 客户端支持防止XSRF

优缺点: ajax: 本身是针对MVC的编程,不符合现在前端MVVM的浪潮 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案 JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务 axios: 从 node.js 创建 http 请求 支持 Promise API 客户端支持防止CSRF。

八、什么是MVVM

​ MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。

​ 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。

​ ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

九、mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合

​ mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。

​ 区别:vue数据驱动,通过数据来显示视图层而不是节点操作。

​ 场景:数据操作比较多的场景,更加便捷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值