- 场景:数据操作比较多的场景,更加便捷
MVVM
-
Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。
-
View 代表UI 组件,它负责将数据模型转化成UI 展现出来。
-
ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。
-
在vue中,使用了双向绑定技术,就是View的变化能实时让Model发生变化,而Model的变化也能实时更新到View。
-
MVC有厚重的View Controller,无处安放的网络逻辑,较差的可测试性
请说出vue.cli项目中src目录每个文件夹和文件的用法?
- 答:assets文件夹是放静态资源;components是放组件;router是定义路由相关的配置;view视图;app.vue是一个应用主组件;main.js是入口文件
vue.cli中怎样使用自定义的组件?有遇到过哪些问题吗?
-
第一步:在components目录新建你的组件文件(smithButton.vue),script一定要export default {
-
第二步:在需要用的页面(组件)中导入:import smithButton from
-
第三步:’/components/smithButton.vue’
-
第三步:注入到vue的子组件的components属性上面,components:{smithButton}
-
第四步:在template视图view中使用,
-
问题有:smithButton命名,使用的时候则smith-button。
怎么定义vue-router的动态路由?怎么获取传过来的动态参数?
- 答:在router目录下的index.js文件中,对path属性加上/:id。 使用router对象的params.id
vue-router有哪几种导航钩子?
- 答:三种,一种是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。第二种:组件内的钩子;第三种:单独路由独享组件
组件参数传递
-
父组件传给子组件:子组件通过props方法接受数据;
-
子组件传给父组件:$emit方法传递参数
-
Vuex多组件共享状态(数据的管理) 组件间的关系也没有限制 功能比pubsub强大, 更适用于vue项目
Slot通信是带数据的标签
-
Pubsub第三方库(消息订阅与发布)适合于任何关系的组件间通信
-
hash模式 history模式
-
hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取
-
history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()- 可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更
vue-loader是什么?使用它的用途有哪些?
-
答:解析.vue文件的一个加载器,跟template/js/style转换成js模块。
-
用途:js可以写es6、style样式可以scss或less、template可以加jade等
请说下封装 vue 组件的过程?
- 答:首先,组件可以提升整个项目的开发效率。能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发:效率低、难维护、复用性等问题。
然后,使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件。子组件需要数据,可以在props中接受定义。而子组件修改好数据后,想把数据传递给父组件。可以采用emit方法。
vuex
-
State:存放数据状态,不可直接修改里面数据
-
Mutations:定义的方法动态修改Vuex的store中的状态或数据
-
Getters:类似vue的计算属性,主要用来过滤一些数据。
-
Action:可以理解为通过将mutations里面处理数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。view 层通过 store.dispath 来分发 action。
-
Modules:项目特别复杂的时候,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。
自定义指令(v-check、v-focus)的方法有哪些?它有哪些钩子函数?还有哪些钩子函数参数?
-
答:全局定义指令:在vue对象的directive方法里面有两个参数,一个是指令名称,另外一个是函数。组件内定义指令:directives
-
钩子函数:bind(绑定事件触发)、inserted(节点插入的时候触发)、update(组件内相关更新)
-
钩子函数参数:el、binding
keep-alive
- Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
vue.js的两个核心
-
数据驱动
-
组件系统
vue修饰符
-
.prevent: 提交事件不再重载页面;
-
.stop: 阻止单击事件冒泡;
-
.self: 当事件发生在该元素本身而不是子元素的时候会触发;
-
.capture: 事件侦听,事件发生的时候会调用
vue的key值
用于管理可复用的元素。因Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做使Vue变得非常快,为了高效的更新虚拟DOM
route & router & routes
-
router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了许多关键的对象和属性。(管理所有路由)
-
route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象,可以获取对应的name,path,params,query等 (一条路由)
-
routes 一组路由 (一组路由)
computed & watch
-
computed是一个计算属性,类似于过滤器,对于绑定到view的数据进行处理,具有缓存性,简化了计算和处理过程 有get和set
-
watch是一个观察动作,监听props,$emit等异步操作,无缓存性
-
computed的话是通过几个数据的变化,来影响一个数据,而watch,则是可以一个数据的变化,去影响多个数据
当一个属性受多个属性影响的时候就需要用到computed
当一条数据影响多条数据的时候就需要用watch
Vue-router 和location.href
-
使用location.href=’/url’来跳转,简单方便,但是刷新了页面;
-
使用history.pushState(’/url’),无刷新页面,静态跳转;
聊聊你对Vue.js的template编译的理解?
- 答:简而言之,就是先转化成AST树,再得到的render函数返回VNode(Vue的虚拟DOM节点)
详情步骤:
-
首先,通过compile编译器把template编译成AST语法树(abstract syntax tree 即 源代码的抽象语法结构的树状表现形式),compile是createCompiler的返回值,createCompiler是用以创建编译器的。另外compile还负责合并option。
-
然后,AST会经过generate(将AST语法树转化成render funtion字符串的过程)得到render函数,render的返回值是VNode,VNode是Vue的虚拟DOM节点,里面有(标签名、子节点、文本等等)
传参
-
路由传参:
-
router.js 后边跟:id配置参数
-
query 方法传参
-
name 方法传参
-
vue自带标签标签传参
-
组件传参:
-
父传子 props
-
子传父 this.$emit()
-
子传父 this.emit非父子组件eventHub中转站this. emit非父子组件 eventHub 中转站 this.emit非父子组件eventHub中转站this.on
-
vuex state 存的变量,mutations改变的状态 actions 触发的行为(方法)
组件的引入
导入组件import Vheader from ‘./components/Vheader.vue’
挂载组件在export default 中 定义一个key为components,值为一个对象,这个对象中放着导入键值对;键为变量名,值为组件名,在es6中,键值相同时,可以缩写为一个单一的值。比如:components:{ Vheader }
在template模板中使用组件:
如何优化SPA应用的首屏加载速度慢的问题?
-
将公用的JS库通过script标签外部引入,减小 app.bundel 的大小,让浏览器并行下载资源文件,提高下载速度;
-
在配置 路由时,页面和组件使用懒加载的方式引入,进一步缩小 app.bundel 的体积,在调用某个组件时再加载对应的js文件;
-
加一个首屏loading图,提升用户体验;
scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?
-
答:css的预编译。
-
使用步骤:
-
第一步:用npm 下三个loader(sass-loader、css-loader、node-sass)
-
第二步:在build目录找到webpack.base.config.js,在那个extends属性中加一个拓展.scss
-
第三步:还是在同一个文件,配置一个module属性
-
第四步:然后在组件的style标签加上lang属性 ,例如:lang=”scss”
-
有哪几大特性:
-
可以用变量,例如($变量名称=值);
-
可以用混合器,例如()
-
可以嵌套
前端如何优化网站性能?
-
减少 HTTP 请求数量
-
在浏览器与服务器进行通信时,主要是通过 HTTP 进行通信。浏览器与服务器需要经过三次握手,每次握手需要花费大量时间。而且不同浏览器对资源文件并发请求数量有限(不同浏览器允许并发数),一旦 HTTP 请求数量达到一定数量,资源请求就存在等待状态,这是很致命的,因此减少 HTTP 的请求数量可以很大程度上对网站性能进行优化。
-
CSS Sprites
-
国内俗称CSS精灵,这是将多张图片合并成一张图片达到减少HTTP请求的一种解决方案,可以通过CSS的background属性来访问图片内容。这种方案同时还可以减少图片总字节数。
-
合并 CSS 和 JS 文件
-
现在前端有很多工程化打包工具,如:grunt、gulp、webpack等。为了减少 HTTP 请求数量,可以通过这些工具再发布前将多个CSS或者多个JS合并成一个文件。
-
采用 lazyLoad
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。
分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取
来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-8SbpsDNt-1713698171577)]
最后
一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。
分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取
[外链图片转存中…(img-eonWkYDB-1713698171577)]