2024年 Vue经典面试题 -- 必问知识点 --(包含答案)

Click me

复制代码

(2)ViewModel 层

var app = new Vue({

el: ‘#app’,

data: {  // 用于描述视图状态

message: ‘Hello Vue!’,

},

methods: {  // 用于描述视图行为

showMessage(){

let vm = this;

alert(vm.message);

}

},

created(){

let vm = this;

// Ajax 获取 Model 层的数据

ajax({

url: ‘/your/server/data/api’,

success(res){

vm.message = res;

}

});

}

})复制代码

(3) Model 层

{

“url”: “/your/server/data/api”,

“res”: {

“success”: true,

“name”: “IoveC”,

“domain”: “www.cnblogs.com”

}

}

2.Vuex响应式数据/双向绑定原理


Vue 数据双向绑定主要是指:数据变化更新视图,视图变化更新数据。其中,View变化更新Data,可以通过事件监听的方式来实现,所以 Vue数据双向绑定的工作主要是如何根据Data变化更新View

简述

当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。

这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。

每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。

深入理解:

监听器 Observer:对数据对象进行遍历,包括子属性对象的属性,利用 Object.defineProperty() 对属性都加上 setter 和 getter。这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化。

解析器 Compile:解析 Vue 模板指令,将模板中的变量都替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,调用更新函数进行数据更新。

订阅者 Watcher:Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁 ,主要的任务是订阅 Observer 中的属性值变化的消息,当收到属性值变化的消息时,触发解析器 Compile 中对应的更新函数。每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新——这是一个典型的观察者模式

订阅器 Dep:订阅器采用 发布-订阅 设计模式,用来收集订阅者 Watcher,对监听器 Observer 和 订阅者 Watcher 进行统一管理。

Vue 双向数据绑定原理

数据的双向绑定是通过数据劫持结合发布订阅实现的。利用Object.defineproperty()方法将各个属性的getter和setter方法改写。当数据发生改变的时候,通知订阅者,并触发对应的回调函数,重新渲染数据。主要是实现以下几点:

(1) 数据观察者Observer,观察每个属性,当发生变化的时候,得到最新值并通知订阅者。

(2) 指令编译器Compile,对每个元素的节点进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数。

(3) 监听者Watcher,是数据观察者Observer和编译器Compile的桥梁。能订阅每个数据属性变化,当收到变化通知后,执行指令绑定的相应回调,从而更新视图。

vue会遍历data中的所有属性,利用Object.definedProperty这个方法给data中每一个属性增加监听者,即给每一个属性增加get方法和set方法,当数据发生变化时,会触发set方法,当获取数据时,会触发get方法;

数据劫持

Object.defineProperty()

控制一个对象属性的一些特有操作,比如读写权、是否可以枚举

通过get和set方法对data里的每个属性进行劫持

发布者-订阅者模式

监听器Observer 用来劫持并监听所有属性,如果有变动的,就通知订阅者。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一些Vue试题。是一些常见的Vue试题及其答案: 1. 什么是Vue.js? Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它通过使用组件化的开发方式,使得构建复杂的Web应用变得更加简单和高效。 2. Vue.js的特点有哪些? - 简洁易学:Vue.js的API简单易懂,学习曲线较低。 - 组件化开发:Vue.js采用组件化的开发方式,使得代码可复用、可维护性高。 - 响应式数据绑定:Vue.js使用双向数据绑定机制,使得数据的变化能够实时反映在视图上。 - 虚拟DOM:Vue.js通过虚拟DOM的方式提高了页面渲染的性能。 - 生态系统丰富:Vue.js拥有庞大的社区和生态系统,有大量的插件和工具可供选择。 3. Vue.js中的生命周期钩子函数有哪些? Vue.js中的生命周期钩子函数包括:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。 4. Vue.js中的computed和watch有什么区别? - computed是计算属性,它根据依赖的数据动态计算出一个新的值,并将其缓存起来,只有依赖的数据发生变化时才会重新计算。 - watch是侦听器,它用于监听某个数据的变化,并在数据变化时执行相应的回调函数。 5. Vue.js中的v-if和v-show有什么区别? - v-if是条件渲染指令,根据表达式的真假来决定是否渲染DOM元素。当条件为假时,DOM元素不会被渲染到页面上。 - v-show也是条件渲染指令,但是它是通过控制元素的display属性来实现的。当条件为假时,DOM元素仍然存在于页面上,只是通过display属性隐藏起来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值