vue常见面试题(2)

1.v-on可以监听多个方法吗?(可以的)

一个元素绑定多个事件的两种写法,一个事件绑定多个函数的两种写法,修饰符的使用。

<astyle="cursor:default"v-on='{click:DoSomething,mouseleave:MouseLeave}'>doSomething</a>

在method方法里面分别写两个时事件;

<button@click="a(),b()">点我ab</button>

2.vue事件中如何使用event对象

<button@click="Event($event)">事件对象</button>

3.比如你想让一个dom元素显示,然后下一步去获取这个元素的offsetWidth,最后你获取到的会是0。

因为你改变数据把show变成true,元素并不会立即显示,理所当然也不会获取到动态宽度。

正确的做法是先把元素show出来,在$nextTick去执行获取宽度的操作

openSubmenu(){

this.show=true//获取不到宽度

this.$nextTick(()=>//这里才可以 let w = this.$refs.submenu.offsetWidth;})}

4.Vue 组件中 data 为什么必须是函数

vue组件中data值不能为对象,因为对象是引用类型,组件可能会被多个实例同时引用。

如果data值为对象,将导致多个实例共享一个对象,其中一个组件改变data属性值,其它实例也会受到影响

5.vue中子组件调用父组件的方法

第一种方法是直接在子组件中通过this.$parent.event来调用父组件的方法

第二种方法是在子组件里用$emit向父组件触发一个事件,父组件监听这个事件就行了。

第三种都可以实现子组件调用父组件的方法,

6.vue中 keep-alive 组件的作用

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

7.vue中如何编写可复用的组件?

①创建组件页面eg Toast.vue;

②用Vue.extend()扩展一个组件构造器,再通过实例化组件构造器,就可创造出可复用的组件

③将toast组件挂载到新创建的div上;

④把toast组件的dom添加到body里;

⑤修改优化达到动态控制页面显示文字跟显示时间;

8.什么是vue生命周期和生命周期钩子函数

beforecreated:在实例初始化之后,el 和 data 并未初始化(这个时期,this变量还不能使用,在data下的数据,和methods下的方法,watcher中的事件都不能获得到;)

created:完成了 data 数据的初始化,el没有(这个时候可以操作vue实例中的数据和各种方法,但是还不能对"dom"节点进行操作;)

beforeMount:完成了 el 和 data 初始化 //这里的el是虚拟的dom;

mounted :完成挂载,在这发起后端请求,拿回数据,配合路由钩子做一些事情(挂载完毕,这时dom节点被渲染到文档内,一些需要dom的操作在此时才能正常进行)

beforeUpdate:是指view层数据变化前,不是data中的数据改变前触发;

update:是指view层的数据变化之后,

beforeDestory: 你确认删除XX吗?

destoryed :当前组件已被删除,清空相关内容

9.vue更新数组时触发视图更新的方法

Vue.set==========Vue.set(target,key,value)这个方法主要是用于避开vue不能检测属性被添加的限制

Vue.set(array,indexOfItem,newValue)//indexOfItem指的索引this.array.$set(indexOfItem,newValue)

Vue.set(obj,keyOfItem,newValue)this.obj.$set(keyOfItem,newValue)Vue.delete这个方法主要用于避开vue不能检测到属性被删除;Vue.delete(array,indexOfItem)this.array.$delete(indexOfItem)Vue.delete(obj,keyOfItem)this.obj.$delete(keyOfItem)

10.webpack的编译原理

webpack的作用

①、依赖管理:方便引用第三方模块、让模块更容易复用,避免全局注入导致的冲突、避免重复加载或者加载不需要的模块。会一层一层的读取依赖的模块,添加不同的入口;同时,不会重复打包依赖的模块。

②、合并代码:把各个分散的模块集中打包成大文件,减少HTTP的请求链接数,配合UglifyJS(压缩代码)可以减少、优化代码的体积。

③、各路插件:统一处理引入的插件,babel编译ES6文件,TypeScript,eslint 可以检查编译期的错误。

一句话总结:webpack 的作用就是处理依赖,模块化,打包压缩文件,管理插件。

一切皆为模块,由于webpack只支持js文件,所以需要用loader 转换为webpack支持的模块,其中plugin 用于扩张webpack 的功能,在webpack构建生命周期的过程中,在合适的时机做了合适的事情。

webpack怎么工作的过程

①解析配置参数,合并从shell(npm install 类似的命令)和webpack.config.js文件的配置信息,输出最终的配置信息;

②注册配置中的插件,让插件监听webpack构建生命周期中的事件节点,做出对应的反应;

③解析配置文件中的entry入口文件,并找出每个文件依赖的文件,递归下去;

④在递归每个文件的过程中,根据文件类型和配置文件中的loader找出对应的loader对文件进行转换;

⑤递归结束后得到每个文件最终的结果,根据entry 配置生成代码chunk(打包之后的名字);

⑥输出所以chunk 到文件系统。

11.vue等单页面应用及其优缺点

缺点:

不支持低版本的浏览器,最低只支持到IE9;

不利于SEO的优化(如果要支持SEO,建议通过服务端来进行渲染组件);

第一次加载首页耗时相对长一些;

不可以使用浏览器的导航按钮需要自行实现前进、后退。

优点:

无刷新体验,提升了用户体验;

前端开发不再以页面为单位,更多地采用组件化的思想,代码结构和组织方式更加规范化,便于修改和调整;

API 共享,同一套后端程序代码不用修改就可以用于Web界面、手机、平板等多种客户端

用户体验好、快,内容的改变不需要重新加载整个页面。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容