1. vue 几种常用的指令v-if v-else v-html v-for v-bind v-model v-show v-on v-text v-once 2. css 只在当前组件起作用scopedstyle scoped/style3. v-if 和 v-show 的区别前者是真正的条件渲染, 在...
1. vue 几种常用的指令
-
v-if
-
v-else
-
v-html
-
v-for
-
v-bind
-
v-model
-
v-show
-
v-on
-
v-text
-
v-once
2. css 只在当前组件起作用
- scoped
<style scoped>
</style>
3. v-if 和 v-show 的区别
-
前者是真正的条件渲染, 在切换过程中条件块内的监听器和子组件会被销毁和重建, 只有条件为真, 才会渲染
-
后者无论条件成不成立都会添加到页面, 只是进行简单 css 样式(display)的改变
4. $route 和 $router 区别
-
$route 对象表示当前的路由信息, 包含了当前 URL 解析得到的信息, 包含当前的路径,参数,query对象
-
$router 对象是全局路由的实例, 是 router 构造方法的实例, 包含 push, go, replace方法
5. vue 常用的修饰符
事件
-
stop(阻止冒泡)
-
sync(实现子组件修改父组件的值, 不能与表达式连用)
-
prevent(阻止默认事件)
-
passive(不阻止浏览器默认行为)
-
native(根元素添加事件)
-
self(只有点击事件源才会触发)
-
capture(捕获)
-
once(只触发一次)
表单
-
lazy(失焦或回车触发)
-
number(转数字)
-
trim(去除两端空格)
键盘
-
enter
-
esc
-
space
-
up
-
down
6. vue 中 key 值的作用
给每个节点一个唯一的标识, Diff算法可以正确的识别此节点, 更精确匹配目标节点
7. 如何获取 dom
通过给组件绑定 ref, 可以使用 $refs 对象获取 , 要在挂载完成后操作
8. vue 等单页面应用及其优缺点
单页面:
- 通俗一点说就是指只有一个主页面的应用, 浏览器一开始要加载所有必须的 html, js, css, 所有的页面内容都包含在这个所谓的主页面中.
多页面:
? 就是指一个应用中有多个页面, 页面跳转时是整页刷新
优点:
-
用户体验好, 速度块, 内容改变的时候不需要重新加载页面, 对服务器压力较小
-
前后端分离, 降低耦合度, 提升开发效率
-
不以页面为单位, 更多的采用组件化的思想, 代码结构和组织方式更加规范化, 便于修改和调整
缺点:
-
首次加载需要加载大量的资源, 加载时间相对较长
-
容易造成css命名冲突
-
不利于 SEO 优化, 单页页面, 数据在前端渲染, 就意味着没有SEO
-
页面导航不可用, 如果一定要用导航前进, 后退, 需要自己建立堆栈管理
9. 的作用是什么
-
使用keep-alive包裹的组件在切换时不会被销毁, 会被缓存到内存中
-
避免重新渲染消耗性能, 可以配合属性max使用
10. 分别阐述 computed 和 watch的使用场景
共同点:
? 都是希望在依赖数据发生改变的时候, 被依赖的数据根据预先定义好的函数发生自动的变化
应用场景:
-
watch 擅长处理的场景: 一个数据影响多个数据
-
computed 擅长处理的场景: 一个数据受多个数据影响
11. $nextTick 的使用
- 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM 进行操作
12. assets 和 static 的区别
- 二者都是用来存放静态资源文件
- 放在
static
中的文件不会进行构建编译处理, 也就不会压缩体积, 在打包时效率会更高, 但体积更大的在服务器中就会占据更大的空间 - 放在
assets
中的文件会进行体积压缩, 代码格式化, 压缩后放在static
中一同上传到服务器
建议样式放在 assets
中进行打包, 引入的第三方文件放到 static
中, 因为引入的文件阴茎做过打包处理
13. vue 和 jQuery 的区别
JQuery
是一个快速, 简介的javascript
框架Vue
是一套用于构建用户界面的渐进式JavaScript框架
区别:
jQuery
是通过获取DOM对象, 然后对DOM对象进行操作Vue
是通过Vue对象将数据和View完全分离开来了对数据进行操作不再需要引用相应的DOM对象
14. 请说出封装 vue 组件的过程
首先使用Vue.extend()创建组件
接着用Vue.component()注册组件
然后如果子组件需要数据, 可以在props中接受定义
最后子组件修改好数据后可以使用emit()方法传递给父组件
Vue.extend()创建组件:
var myCom = Vue.extend({
template: '<div>这是我的组件</div>'
})
全局注册:
<template id="myCom">
<div>myCom 组件</div>
</template>
Vue.component('myCOm',myCom)// 注册上面创建的组件
全局注册语法糖: 不需要创建直接注册
Vue.component('myCom',{
template:`
<div>myCom 组件</div>
`
})
使用template和script标签:
<script type="text/x-template" id="myCom1">
<div>这是script标签构建的组件</div>
</script>
Vue.component('my-com',{
template: '#myCom'
})
局部注册:
var app = new Vue({
el: '#app',
components: {
'my-com': myCom
}
})
语法糖:
var app = new Vue({
el: '#app',
components: {
'my-com': {
template: '<div>这是我的组件</div>'
}
}
})
使用template和script标签:
var app = new Vue({
el: '#app',
components: {
'my-com': {
template: '#myCom'
}
}
})
15. params 和 query 的区别
- 使用
params
传参只能使用name进行引入, 且params是路由的一部分, 必须在路由后面添加参数名, 如果在跳转时没有传递这个参数, 回到是跳转失败或者页面会没有内容 - 使用
query
传参则name, path都可以使用, query时拼接在url后面的参数, 没有参数名也没关系
16. vue 更新数组时触发视图更新的方法
操作对象或数组
- Vue.set(target, key, value)
- Vue.delete(target, key)
变异方法
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
以下方法不会更改原数组: 返回的时新数组, 可以用新数组替换原来的数组
- filter()
- concat()
- slice()
17. vue 常用的 UI 组件库
-
Vuetify
https://vuetifyjs.com/zh-Hans/ 中文
https://vuetifyjs.com/en/
-
Element UI
-
Bootstrap-Vue
-
Vue-strap
18. vue-router 实现路由懒加载(动态加载路由)
-
const Foo= () => import('./Foo.vue') // 按需加载
-
const Foo = () => Promise.resolve(['@/components/Foo'],resolve)// 异部组件
19. 介绍 Vue 的生命周期每个函数
- beforeCreate(){} 创建之前
data ----- undefind
method --- undefind
$el ------ undefind
- created(){} 创建完成 (如果需要用请求到的数据渲染页面, 可以在此处发请求)
data ----- 数据观测(data observer) // 尽量不要在此处操作data
method --- 可用
$el ------ undefind
- beforeMount(){} 挂载之前 (这一步把正在内存中渲染好的模板结构替换到页面上)
data ----- 数据观测(data observer)
method --- 可用
$el ------ undefind
- mounted(){} 挂载完成 (组件创建阶段最后的一个生命周期函数)
data ----- 数据观测(data observer)
method --- 可用
$el ------ 创建完成 // 如果使用到一些第三方的UI插件, 而且这个插件还需要被初始化, 那么, 必须在mounted中来初始化插件
- beforeUpdate(){} 更新之前
正在根据最新的data数据,重新渲染内存中的的模板结构;并把渲染好的模板结构替换到页面上,可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程
- updated(){} 更新之后
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作
- beforeDestroy(){} 销毁之前
实例销毁之前调用, 组件即将被销毁, 但是还没有真正开始销毁, 在这里, 实例仍然完全可用, data、methods等数据或方法,依旧可以被正常访问
- destroyed(){} 销毁完成
vue 实例销毁后调用, Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子组件也会被销毁, data和methods都不可使用
- activated(){} 如果页面有 keep-alive 缓存功能, 这个函数会触发
当我们运用了组件缓存时, 如果想每次切换都发送一次请求的话, 需要把请求函数写在activated中, 写在created或mounted中其只会在首次加载该组件的时候起作用
在服务器端渲染期间不被调用, 就是在挂载后和更新前被调用
本文标题为:vue面试题
基础教程推荐
- uniapp开发微信小程序自定义顶部导航栏功能实例 2022-10-21
- Ajax发送和接收请求 2022-12-15
- JS滚动到顶部踩坑解决记录 2023-07-10
- 使用ajax跨域调用springboot框架的api传输文件 2023-02-23
- HTML clearfix清除浮动讲解 2022-11-20
- Javascript Bootstrap的网格系统,导航栏和轮播详解 2023-08-11
- Ajax+smarty技术实现无刷新分页 2022-12-15
- cocos creator游戏实现loading加载页面,游戏启动加载动画 2022-10-29
- 在实战中可能碰到的几种ajax请求方法详解 2023-02-01
- 关于Ajax跨域问题及解决方案详析 2023-02-23