vue学习笔记
本文最后更新于64 天前,其中的信息可能已经过时,如有错误请发送邮件到2426250897@qq.com

1、vue优点

  • 轻量级
  • 速度快
  • 简单易学
  • 低耦合
  • 可重用性
  • 独立开发
  • 文档齐全,且文档为中文文档

2、vue父组件向子组件传递数据

props

3、子组件向父组件传递事件

$emit

4、v-show和v-if指令的共同点和不同点

相同点:都可以控制dom元素的显示和隐藏

不同点:v-show只是改变display属性,dom元素并未消失,切换时不需要重新渲染页面

v-if直接将dom元素从页面删除,再次切换需要重新渲染页面

5、如何让CSS只在当前组件中起作用

scoped

6、<keep-alive></keep-alive>的作用是什么

主要是用于需要频繁切换的组件时进行缓存,不需要重新渲染页面

7、如何获取dom

给dom元素加ref=‘refname’,然后通过this.$refs.refname进行获取dom元素

8、vue的指令

  • v-model
  • v-on
  • v-html
  • v-text
  • v-once
  • v-if
  • v-show

9、vue-loader是什么?它的用途是什么?

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

用途:js可以写es6、style样式

10、为什么用key

给每个dom元素加上key作为唯一标识 ,diff算法可以正确的识别这个节点,使页面渲染更加迅速。

11、axios及安装?

vue项目中使用ajax时需要axios插件

下载方式cnpm install axios –save

12、v-model的使用

v-model用于表单的双向绑定,可以实时修改数据

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

components存放组件

app.vue主页面入口

index.js主文件入口

ass存放静态资源文件

14、分别简述computed和watch的使用场景

用官网的一句话来说,所有需要用到计算的都应该使用计算属性。多条数据影响一条数据时使用计算属性,使用场景购物车。

如果是一条数据更改,影响多条数据时,使用watch,使用场景搜索框。

15、v-on可以监听多个方法吗?

可以,比如 v-on=“onclick,onbure”

16、$nextTick的使用

在data()中的修改后,页面中无法获取data修改后的数据,使用$nextTick时,当data中的数据修改后,可以实时的渲染页面

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

因为javaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象。

组件中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,他们值负责各自维护数据,不会造成混乱。而单纯的写成对象形式,就是所有组件实例共用了一个data,这样改一个全部都会修改。

18、渐进式框架的理解

主张最少

可以根据不同的需求选择不同的层级

19、vue在双向数据绑定是如何实现的?

vue双向数据绑定是通过数据劫持、组合、发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变

核心:关于vue双向数据绑定,其核心是Object.defineProperty()方法

20、单页面应用和多页面应用区别及缺点

单页面应用(SPA),通俗的说就是指只有一个主页面的应用,浏览器一开始就加载所有的js、html、css。所有的页面内容都包含在这个主页面中。但在写的时候,还是分开写,然后再加护的时候有路由程序动态载入,单页面的页面跳转,仅刷新局部资源。多用于pc端。

多页面(MPA),就是一个应用中有多个页面,页面跳转时是整页刷新

单页面的优点:用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点spa对服务器压力较小;前后端分离,页面效果会比较酷炫

单页面缺点:不利于seo;导航不可用,如果一定要导航需要自行实现前进、后退。初次加载时耗时多;页面复杂度提高很多。

21、Vue 项目中为什么要在列表组件中写 key,其作用是什么?

key是给每一个vnode的唯一id,可以依靠key,更准确, 更快的拿到oldVnode中对应的vnode节点。

更准确

因为带key就不是就地复用了,在sameNode函数 a.key === b.key对比中可以避免就地复用的情况。所以会更加准确。

更快

利用key的唯一性生成map对象来获取对应节点,比遍历方式更快。

22、父组件和子组件生命周期钩子执行顺序是什么?

加载渲染过程

父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted

子组件更新过程

父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated

父组件更新过程

父 beforeUpdate -> 父 updated

销毁过程

父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed

23、谈一谈你对 nextTick 的理解?

当你修改了data的值然后马上获取这个dom元素的值,是不能获取到更新后的值,你需要使用$nextTick这个回调,让修改后的data值渲染更新到dom元素之后在获取,才能成功。

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

因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象。

组建中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了。

25、vue和jQuery的区别

jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$(“lable”).val();,它还是依赖DOM元素的值。

Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

26、delete和Vue.delete删除数组的区别

delete只是被删除的元素变成了 empty/undefined 其他的元素的键值还是不变。Vue.delete 直接删除了数组 改变了数组的键值。

27、SPA首屏加载慢如何解决

安装动态懒加载所需插件;使用CDN资源。

28、vue项目是打包了一个js文件,一个css文件,还是有多个文件?

根据vue-cli脚手架规范,一个js文件,一个CSS文件。

29、vue更新数组时触发视图更新的方法

  • push();
  • pop();
  • shift();
  • unshift();
  • splice();
  • sort();
  • reverse()

30、什么是 vue 生命周期?有什么作用?

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添加自己的代码的机会。

31、第一次页面加载会触发哪几个钩子?

beforeCreate, created, beforeMount, mounted

32、vue获取数据在一般在哪个周期函数

created

beforeMount

mounted

33、created和mounted的区别

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

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

34、vue生命周期的理解

总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。

创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。在created阶段,vue实例的数据对象data有了,$el还没有。

载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。

更新前/后:当data变化时,会触发beforeUpdate和updated方法。

销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在。

35、vuex是什么?

vue框架中状态管理。

36、vuex有哪几种属性?

有五种,State、 Getter、Mutation 、Action、 Module

  • state: 基本数据(数据源存放地)
  • getters: 从基本数据派生出来的数据
  • mutations : 提交更改数据的方法,同步!
  • actions : 像一个装饰器,包裹mutations,使之可以异步。
  • modules : 模块化Vuex

37、vue全家桶

vue-cli、vuex、vueRouter、Axios

38、vue-cli 工程常用的 npm 命令有哪些?

npm install 下载 node_modules 资源包的命令

npm run dev 启动 vue-cli 开发环境的 npm 命令

npm run build vue-cli 生成 生产环境部署资源 的 npm 命令

npm run build–report 用于查看 vue-cli 生产环境部署资源文件大小的 npm 命令

39、请说出 vue-cli 工程中每个文件夹和文件的用处?

build 文件夹是保存一些 webpack 的初始化配置。

config 文件夹保存一些项目初始化的配置

node_modules 是 npm 加载的项目依赖的模块

src 目录是我们要开发的目录:

assets 用来放置图片

components 用来放组件文件

app.vue 是项目入口文件

main.js 项目的核心文件

40、v-if 和 v-show 有什么区别

共同点:都是动态显示 DOM 元素

区别点:

v-if 是动态的向 DOM 树内添加或者删除 DOM 元素

v-show 是通过设置 DOM 元素的 display 样式属性控制显隐

v-if 切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件

v-show 只是简单的基于 css 切换

性能消耗

v-if 有更高的切换消耗

v-show 有更高的初始渲染消耗

使用场景

v-if 适合运营条件不大可能改变

v-show 适合频繁切换

41、v-for 与 v-if 的优先级?

v-for 和 v-if 同时使用,有一个先后运行的优先级,v-for 比 v-if 优先级更高,这就说明在

v-for 每次的循环赋值中每一次调用 v-if 的判断,所以不推荐 v-if 和 v-for 在同一个标签中同时使用。

42、 vue 常用的修饰符?

事件修饰符

  • .stop 阻止事件继续传播
  • .prevent 阻止标签默认行为
  • .capture 使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
  • .self 只当在 event.target 是当前元素自身时触发处理函数
  • .once 事件只会触发一次
  • .passive 告诉浏览器你不想阻止事件的默认行为

v-model 的修饰符

  • .lazy 通过这个修饰符,转变为在 change 事件再同步
  • .number 自动将用户输入值转化为数值类型
  • .trim 自动过滤用户输入的收尾空格

键盘事件修饰符

  • .enter
  • .tab
  • .delete (捕获“删除”和“退格”键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

系统修饰符

  • .ctrl
  • .alt
  • .shift
  • .meta

鼠标按钮修饰符

  • .left
  • .right
  • .middle

43、vue 事件中如何使用 event 对象?

获取事件对象,方法参数传递 $event 。注意在事件中要使用 $ 符号

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

44、组件传值方式有哪些

父传子:子组件通过props[‘xx’] 来接收父组件传递的属性 xx 的值

子传父:子组件通过 this.$emit(‘fnName’,value) 来传递,父组件通过接收 fnName 事件方法来接收回调

其他方式:通过创建一个bus,进行传值

使用Vuex

45、vue 中子组件调用父组件的方法?

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

在子组件里用$emit()向父组件触发一个事件,父组件监听这个事件就行了。

父组件把方法传入子组件中,在子组件里直接调用这个方法。

46、 如何让 CSS 只在当前组件中起作用?

在组件中的 style 前面加上 scoped

觉得有帮助可以投喂下博主哦~感谢!
作者:Jianbo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
转载请注明文章地址及作者

评论

  1. K
    iPhone Safari
    2 月前
    2025-3-15 23:02:27

    来自吉林
  2. K
    iPhone Safari
    2 月前
    2025-3-15 23:03:48

    111

    来自吉林

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇