前端面试 - vue小白总结(持续扩充)

24. 请说出vue.cli项目中src目录每个文件夹和文件的用法?

25. $nextTick的使用

26. vue组件中data为什么必须是一个函数?

27. vue slot

28. axios

29. webpack

30. 如何让CSS只在当前组件中起作用?

31. 如何获取dom?

32. 单页面应用和多页面应用区别及优缺点

33. iframe的优缺点?

34. vue3.0新特性


1. vue的优点


  1. 低耦合:View独立于Model的变化和修改,当View变化的时候Model可以不变,当Model变化的时候View也可以不变

  2. 可重用性:可以把一个视图逻辑放在一个ViewModel里,让很多View重用这段视图逻辑

  3. 独立开发:开发人员可以专注于业务逻辑和数据的开发,设计人员可以专注于页面设计

  4. 可测试:可以针对ViewModel来写测试

2. vue的两个核心点


  1. 数据驱动: ViewModel,保证数据和视图的一致性。

  2. 组件系统: 应用类UI可以看作全部是由组件树构成的。

3. vue和jQuery的区别


jQuery是使用选择器( $ )选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$(“lable”).val();,它还是依赖DOM元素的值。Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

4. 组件化思想


什么是组件化:独立的,可复用的,整体化的 。

为什么要组件化:1.实现功能模块的复用 2.高效执行 3.开发单页面复杂应用

如何进行拆分:1.300行原则 2.复用原则 3.业务复杂性原则

组件带的问题:1.组件状态管理(vuex)2.多组件的混合使用,多页面,复杂业务(vue-router)3.组件间的传参,消息,事件管理(props,emit/on,bus)

5. 请说下封装 vue 组件的过程?


  • 建立组件的模板,先把架子搭起来,写写样式,考虑好组件的基本逻辑。

  • 准备好组件的数据输入。

  • 即分析好逻辑,定好 props 里面的数据、类型。

  • 准备好组件的数据输出。即根据组件逻辑,做好要暴露出来的方法。

  • 封装完毕了,直接调用即可

6. MVVM


  • MVVM是Model-View-ViewModel的缩写,是一种设计思想

  • Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑

  • View代表UI组件,它负责将数据模型转化成UI展现出来

  • ViewModel是一个同步View和Model的对象

  • View和Model之间并没有直接的联系,而是通过ViewModel进行交互

  • Mode和ViewModel之间的交互是双向的,因此View数据的变化会同步到Model中,而Model数据的变化也会立即反应到View上

  • ViewModel通过双向数据绑定,把View层和Model层连接起来,而View和Model之间的同步工作完全是自动的,无需人为干涉

  • 因此开发者只需关注业务逻辑,不需要手动操作DOM,不需要关注同步问题,复杂的数据状态维护由MVVM统一管理

7. 双向绑定


vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;核心:关于VUE双向数据绑定,其核心是 Object.defineProperty() 方法。

vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。

vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。


8. watch和computed?


computed 是计算属性,依赖其他属性计算值,并且 computed 的值有缓存,只有当计算值变化才会返回内容。

watch 监听到值的变化就会执行回调,在回调中可以进行一些逻辑操作。

所以一般来说需要依赖别的属性来动态获得值的时候可以使用 computed,对于监听到值的变化需要做一些复杂业务逻辑的情况可以使用 watch。

computed : 当一个属性受多个属性影响的时候就需要用到 computed ,最典型的栗子:购物车商品结算的时候

watch : 当一条数据影响多条数据的时候就需要用 watch ,栗子:搜索数据

9. 什么是计算属性


计算属性类似于方法,但我们把它看作是属性,如果需要频繁调用,建议使用计算属性

计算属性自带set和get方法,但我们一般不考虑set方法

所以,我们把每个计算属性写成一个函数,函数中使用return返回属性值

10. v-if和v-show


共同点: 都能控制元素的显示和隐藏

不同点: 实现本质方法不同,v-show本质就是通过控制 css 中的 display 设置为 none,控制隐藏,只会编译一次;v-if 是动态的向 DOM 树内添加或者删除 DOM 元素,若初始值为 false ,就不会编译了,即只会渲染一个dom元素。而且 v-if不停的销毁和创建比较消耗性能。

总结:对于一次选择或者数据更新不频繁时,选择v-if;如果需要频繁切换,需要v-show,用display:none控制隐藏和显示效果比较好,否则用v-if会导致dom结点频繁的销毁加载。

11. v-if和v-for的优先级


当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for循环中。所以,不推荐 v-if 和 v-for 同时使用。如果 v-if 和 v-for 一起用的话,vue中的的会自动提示 v-if应该放到外层去。

12. vue事件修饰符


v-on

  • stop:阻止事件冒泡

  • prevent:阻止表单自动提交

  • enter:只监听回车键

  • once:只触发一次事件

  • native:监听组件的原生事件

v-model

  • lazy:让data在失去焦点或按下回车时才更新

  • number:让表单输入的内容自动转换成数字类型

  • trim:去除输入的内容两边的空格

13. vue常用指令


  • v-if:根据表达式的值的真假来显示或隐藏元素

  • v-show:和v-if功能类似

  • v-for:循环创建元素,vue2.0以上必须配合key值使用

  • v-bind:动态绑定属性

  • v-on:监听指定元素的DOM事件

  • v-model:实现表单的value与vue实例的data的双向绑定

  • v-pre:用来显示原始的Mustache标签,跳过它的编译过程

  • v-once:只渲染元素和组件一次


14. 组件间通信


(1)父组件向子组件传值

在组件的vue实例中,设置props对象,对象中的每个成员,都是父组件要传递的数据

在父组件中,把data使用v-bind绑定给子组件需要的数据

(父组件访问子组件:给子组件添加ref属性;通过this.$refs.ref属性值来访问子组件,可以直接调用子组件的data和methods)

(2)子组件向父组件传值

在子组件中绑定一个事件

在事件对应的方法中,使用this.$emit()向父组件发出事件,参数为事件名

父组件使用v-on来监听子组件传递的事件,将该事件绑定给某个方法

(子组件访问父组件:通过this.$parent来访问父组件;通过this.$root来访问子组件)

(3)兄弟组件

A. 兄弟之间传递数据需要借助于事件中心,通过事件中心传递数据; 提供事件中心 var hub = new Vue()

传递数据方,通过一个事件触发hub.$emit(方法名,传递的数据)

接收数据方,通过mounted(){} 钩子中 触发hub.$on()方法名

销毁事件 通过hub.$off()方法名销毁之后无法进行传递数据

B. 多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。

C. 但如果仅仅是传递数据,而不做中间处理,使用 vuex 处理,未免有点大材小用。为此Vue2.4 版本提供了另一种方法----$attrs/$listeners

D.方法六、$parent / $children与 ref

  • ref:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例

  • $parent / $children:访问父 / 子实例

参考链接: https://juejin.im/post/5cde0b43f265da03867e78d3

15. 生命周期


通常可以分为3个阶段:挂载阶段—更新阶段—销毁阶段

beforeCreate(), created(), beforeMounte(), mounted(), beforeupdate(), updated(), beforeDestroy(), destoryed()

  • beforeCreate:创建前,vue实例的data和挂载元素el都还拿不到

  • created:创建后,能拿到data的值,但挂载元素el还拿不到  (http请求在此处发出)

  • beforeMount:挂载前,挂载元素el初始化,但还是虚拟的DOM节点

  • mounted:挂载后,vue实例挂载成功 (最早可以在此进行DOM操作)

  • beforeUpdate:更新前,data变化后触发

  • Updated:更新后,data变化后触发

  • activated:进入页面后触发

  • deactivated:离开页面后触发

  • beforeDestroy:销毁前,调用destroy方法后触发

  • destroyed:销毁后,调用destroy方法后触发,Vue实例销毁

16. created和mounted的区别


  • created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。

  • mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。


17. Vuex


(1)vuex的作用

  • Vuex提供一个在多个组件间共享状态的插件

  • 把需要多个组件共享的变量全部存储在一个对象里面

  • 把这个对象放在顶层的Vue实例中,让其它组件可以使用

(2)vuex原理

  • Vuex是vue的一个插件,只能用在vue上,因为它高度依赖vue的插件系统

  • Vuex中的store对象,本质就是没有template的隐藏着的vue组件

(3)vuex框架核心流程

  • Vuex规定所有的数据操作,都必须通过Vue Components -> Actions -> Mutations -> State的流程来进行

  • 也就是:

    • 首先,在组件中关联actions:this.$store.dispatch()

    • 接着,在actions中,关联mutations:context.commit()

    • 最后,在mutations中,修改state:state.info = ...

(4)使用场景:需要构建一个中大型单页应用,可能会考虑如何更好地在组件外部管理状态时

18. vuex有哪几种属性?


有五种,分别是 State、 Getter、Mutation、Action、 Module

state =>基本数据(数据源存放地)

getters => 从基本数据派生出来的数据

mutations => 提交更改数据的方法,同步!

actions=> 像一个装饰器,包裹mutations,使之可以异步。

modules => 模块化Vuex

19. vue-loader是什么?使用它的用途有哪些?


vue文件的一个加载器,将template/js/style转换成js模块。

用途:js可以写es6、style样式可以scss或less、template可以加jade等

20. vue-router有哪几种导航钩子?


第一种:是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。

第二种:组件内的钩子。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-64hGey1c-1715893516335)]

[外链图片转存中…(img-inr6AxXL-1715893516336)]

[外链图片转存中…(img-1XlBBrpV-1715893516336)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值