前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020年,vue面试遇到的问题(中)

2020年,vue面试遇到的问题(中)

作者头像
桃翁
发布2020-03-13 12:04:56
1.9K0
发布2020-03-13 12:04:56
举报
文章被收录于专栏:前端桃园前端桃园

11、怎么在vue中点击别的区域输入框不会失去焦点?

答:阻止事件的默认行为

具体操作:监听你想点击后不会丢失 input 焦点的那个元素的 mousedown 事件,回调里面调用 event.preventDefault(),会阻止使当前焦点丢失这一默认行为。

12、vue中data的属性可以和methods中的方法同名吗?为什么?

答:不可以

因为,Vue会把methods和data的东西,全部代理到Vue生成的对象中,会产生覆盖所以最好不要同名

13、怎么给vue定义全局的方法?

Vue.prototype.方法名称

14、Vue 2.0 不再支持在 v-html 中使用过滤器怎么办?

解决方法:

①全局方法(推荐)

代码语言:javascript
复制
Vue.prototype.msg = function(msg){
  return msg.replace("\n","<br>")
 }
 <div v-html="msg(content)"></div>

②computed方法

代码语言:javascript
复制
computed:{
 content:function(msg){
  return msg.replace("\n","<br>")
 }
}
<div>{{content}}</div>

③$options.filters(推荐)

代码语言:javascript
复制
filters:{
 msg:function(msg){
  return msg.replace(/\n/g,"<br>")
 }
},    
data:{
 content:"XXXX"
}
<div v-html="$options.filters.msg(content)"></div>

14、怎么解决vue打包后静态资源图片失效的问题?

答:将静态资源的存放位置放在src目录下

16、怎么解决vue动态设置img的src不生效的问题?

代码语言:javascript
复制
<img class="logo" :src="logo" alt="公司logo">
data() {
  return {
    logo:require("./../assets/images/logo.png"),
  };
}

因为动态添加src被当做静态资源处理了,没有进行编译,所以要加上require

17、跟keep-alive有关的生命周期是哪些?描述下这些生命周期

activated和deactivated两个生命周期函数

1.activated:当组件激活时,钩子触发的顺序是created->mounted->activated

2.deactivated: 组件停用时会触发deactivated,当再次前进或者后退的时候只触发activated

18、你知道vue中key的原理吗?说说你对它的理解

暂时没弄明白,等会儿写

19、vue中怎么重置data?

答:Object.assign()

Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

代码语言:javascript
复制
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

注意,具有相同属性的对象,同名属性,后边的会覆盖前边的。

由于Object.assign()有上述特性,所以我们在Vue中可以这样使用:

Vue组件可能会有这样的需求:在某种情况下,需要重置Vue组件的data数据。此时,我们可以通过this.获取当前状态下的,通过options.data()获取该组件初始状态下的data。

然后只要使用Object.assign(this.options.data())就可以将当前状态的data重置为初始状态。

20、vue怎么实现强制刷新组件?

答:① v-if ② this.$forceUpdate

v-if

代码语言:javascript
复制
当v-if的值发生变化时,组件都会被重新渲染一遍。因此,利用v-if指令的特性,可以达到强制
<comp v-if="update"></comp>
<button @click="reload()">刷新comp组件</button>
data() {
 return {
   update: true
  }
 },
 methods: {
  reload() {
     // 移除组件
    this.update = false
      // 在组件移除后,重新渲染组件
      // this.$nextTick可实现在DOM 状态更新后,执行传入的方法。
    this.$nextTick(() => {
      this.update = true
    })
  }
 }

this.$forceUpdate

代码语言:javascript
复制
<button @click="reload()">刷新当前组件</button>
methods: {
  reload() {
    this.$forceUpdate()
  }
}

21、vue如何优化首页的加载速度?

① 第三方js库按CDN引入(一、cdn引入 二、去掉第三方库引入的import 三、把第三方库的js文件从打包文件里去掉)

② vue-router路由懒加载

③ 压缩图片资源

④ 静态文件本地缓存

http缓存:推荐网站:https://www.cnblogs.com/chinajava/p/5705169.html

service worker离线缓存:,缺点:需要在HTTPS站点下,推荐:http://lzw.me/a/pwa-service-worker.html

⑤ 服务器端SSR渲染

除了上面的方案以外,另一种方案也不容小视

我们先说说通常项目中是如何加载页面数据:Vue组件生命周期中请求异步接口,在mounted之前应该都可以,据我了解绝大部分同学是在mounted的时候执行异步请求。但是我们可以把页面需要的请求放到Vue-Router的守卫中执行,意思是在路由beforeEnter之前就可以请求待加载页面中所有组件需要的数据,此时待加载页面的Vue组件还没开始渲染,而Vue组件开始渲染的时候我们就可以用Vuex里面的数据了。

以上方法的实现思路:

图意:每个页面(Page)中都会有很多个Vue组件,可以在Vue组件中添加自定义属性fetchData,fetchData里面可以执行异步请求(图中执行Vuex的Action),但是我们怎么获取到所有组件的fetchData方法并执行呢?如图所示,在router.beforeResolve守卫中,我们看看router.beforeResolve的定义,所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用,意思是即使页面中有异步组件,它会等待异步组件解析之后执行,并且解析守卫在beforeEnter之前执行。那我们怎么在解析守卫中获取到待加载页面的所有组件呢?通过router.getMatchedComponents方法。

这样我们就可以在解析守卫中获取到所有待加载组件的fetchData方法并执行,这样无疑会在组件开始渲染之后获取到所有数据,提高页面加载速度。

很多人可能有个疑问,如果异步请求放在beforeCreate和created不是一样吗?答案是否定的,因为这种方式可以将异步请求放到beforeCreate之前!

22、你了解vue的diff算法吗?

推荐网站:https://www.cnblogs.com/wind-lanyan/p/9061684.html

23、vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?

Vue.js观察数组变化主要通过以下7个方法(push、pop、shift、unshift、splice、sort、reverse)

大家知道,通过Object.defineProperty()劫持数组为其设置getter和setter后,调用的数组的push、splice、pop等方法改变数组元素时并不会触发数组的setter,继而数组的数据变化并不是响应式的,但是vue实际开发中却是实时响应的,是因为vue重写了数组的push、splice、pop等方法

从源码中可以看出,ob.dep.notify()将当前数组的变更通知给其订阅者,这样当使用重写后方法改变数组后,数组订阅者会将这边变化更新到页面中

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端桃园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11、怎么在vue中点击别的区域输入框不会失去焦点?
  • 12、vue中data的属性可以和methods中的方法同名吗?为什么?
  • 13、怎么给vue定义全局的方法?
  • 14、Vue 2.0 不再支持在 v-html 中使用过滤器怎么办?
  • 14、怎么解决vue打包后静态资源图片失效的问题?
  • 16、怎么解决vue动态设置img的src不生效的问题?
  • 17、跟keep-alive有关的生命周期是哪些?描述下这些生命周期
  • 18、你知道vue中key的原理吗?说说你对它的理解
  • 19、vue中怎么重置data?
  • 20、vue怎么实现强制刷新组件?
  • 21、vue如何优化首页的加载速度?
  • 22、你了解vue的diff算法吗?
  • 23、vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档