vue.js面试题

285 阅读5分钟

一、对vue是一套渐进式框架的理解

vue.js+VueRouter+Vuex+组件库(element-ui/mint-ui)
生态很全:完全能够胜任中大型项目的开发
渐进式:把vue当做一个很简单的库去使用,
也可以配合他的生态,用到全面的功能,很容易和其他框架和库整合
bootstrap+vue+axios

二、vue.js的核心是什么

数据驱动(响应式):data中的数据变了,视图才会变
组件化:拆组装,目的在于重用,方便,脏活累活一次干完,之后就轻松了

三、v-if v-show有什么区别

相同点:给人的视觉效果是一样的,都是看得见或者看不见(显示和隐藏)
不同点:v-if是通过插入或者移除DOM节点实现条件渲染,
条件成立元素就被插入到文档中,不成立元素就被移除了
v-show是通过css的display属性控制,看得见或者看不见,
条件成立元素display为其本身的值
(例如span:inline,div:block,input:inline-block),条件不成立display为none

四、vue的常用修饰符

三大类
  事件修饰符:
    .stop  stopPropagation 阻止冒泡
    .prevent preventDefault 阻止默认行为
    .self 事件作用在自己身上才触发
    .once  事件只触发一次
 键盘修饰符 
    .enter 回车键
    .esc 退出键
 v-model 指令修饰符 
    .lazy 由监听oninput事件转为onchange事件
    .number 尽量将文本框中的值转为数字,能转就转,不能转就不转
    .trim 去掉字符串的首尾空格

五、v-on可以监听多个方法吗?

   可以
  v-on='{click:doClick,mouseenter:doMouseEnter}'

六、vue中key值的作用

v-for遍历的时候,需要给每一个元素/组件添加一个唯一的标识
数据劫持
diff算法(虚拟dom映射到真实dom的计算速度)
提高虚拟dom的计算速度
为啥要用虚拟dom?
加快dom绘制速度

七、vue组件中data为啥是个函数

    让当前组件独立成为一个作用域,别的组件无法访问
    export default({
        name:'',
        data(){
            return {
                
            }
        }
    })
    函数:封装性,重用。隔离作用域

八、v-if和v-for的优先级

v-for的优先级大于v-if的优先级,但是要避免v-for和v-if作用在同一个元素上
解决方法:用计算属性代替

九、vue的生命周期钩子函数有哪些

beforeCreate(可以加一个loading图)
created 创建前后
beforeMount (vue还没工作,数据没有替换)
mounted (vue开始工作,数据替换)挂载前后 
beforeUpdate 
updated 更新前后 (在初次渲染页面时,不会执行,他们的执行是伴随着视图的更新触发的,
而视图的更新是因为数据的更新,所以这两个钩子函数是伴随着数据的更新而执行的)
beforeDestroy destroyed销毁前后

十、vue的指令和他的用法

v-model 双向数据绑定
v-if 条件渲染
v-for 循环遍历
v-bind 绑定属性的
v-on 绑定事件的

十一、怎么定义vue-router的动态路由

user/:id/:name
路径带有这种格式的就叫动态路由,表示不确定的东西
怎么获取传递过来的参数呢?
$route.params.id
$route.params.name

十二、v-model是什么,怎么使用,绑定的是啥属性

双向数据绑定的指令,绑定的是元素的value属性
常配合的标签有(input textarea radio checkbox)

十三、axios 是什么,怎么使用?

axios是一个基于promise风格,对原生XMLHttpRequest对象的封装,
提供了很多便捷的api,就可以在浏览器端使用,也可以在服务器端使用
在前端用ajax请求
在后端用http请求
安装指令:cnpm i axios -S
引入 import axios from ‘axios’
挂载到vue原型上
vue.prototype.$http=axios
this.$http({
    url:'',
    method:'',
    data:{}
}).then(data=>{
    
}).catch(err=>{
    
})

十四、vue组件化的理解

根据合适的粒度拆组件之后去组装

十五、routeroute 和 route的区别是什么?

 $route:获取路由信息对象
 $router:路由实例对象 操作路由的对象

十六、active-class是哪个组件的属性?路由嵌套怎么定义

router-link组件
children:[]

十七、第一次加载页面会触发哪几个钩子?

beforeCreate created beforeMount mounted

十八、methods watch computed 的区别

computed:本质是属性,会缓存,不能做异步操作,可读可写
watch:监视开销大的工作或者异步操作
methods:普通方法,调用一次触发一次

十九、组件的通信

父传子:自定义属性 props接
子传父 :自定义事件$emit派发
兄弟组件:$emit $on

二十、子组件调用父组件的方法

1)this.$parent.event可以调用父组件身上的方法,无需绑定在子组件身上
 补充:有时候会失效,暂未发现触发点,不建议使用(2$emit可以调用父组件在子组件身上自定义的事件,需要用@前缀建议使用此种方式
(3)props可以调用父组件绑定在子组件身上的事件. 需要:前缀在router-view身上使用失效

二十一、父组件调用子组件的方法

1.$ref
2.$children

二十二、ref的作用

获取元素,获取组件

二十三、过滤器怎么定义,有啥作用?

 全局vue.filter(name,(input)=>{
          
 })
局部 filters:{
  name(){
              
     }
  }
作用:对插值数据或v-bind绑定的属性做进一步处理,并且过滤器可以串联
{{msg|filter1|filter2}}

二十四、如何自定义指令

 全局 vue.directive(name,(el,binding)=>{
      
 })
 局部 directives:{
       
  }

二十五、vue如何实现动画

单个元素
transition 
多个元素
transition-group必须加key
给transition添加name属性 
写上class
.xx-enter .xx-leave-to
.xx-enter-active .xxx-leave-active
.xx-enter-to .xxx-leave

或者引入 animate.css 添加class

二十六、 vue中父组件和子组件的执行顺序是怎么样的?

先执行父组件的beforeCreated,created,beforeMounted,再执行子组件的beforeCreated,created,beforeMounted,mounted,然后在执行父组件的mounted