vue面试题-应用层

news2024/11/26 15:25:43
  • MVC与MVVM
    • MVC
    • MVVM
  • 双向数据绑定
    • vue2 双向绑定原理
      • v-model原理
    • vue3 双向绑定原理
      • 示例
    • 对比 vue2响应式原理和Vue3响应式原理
  • data为什么是函数?
  • v-if 与 v-show

MVC与MVVM

MVC和MVVM是两种流行的设计模式,它们都是用于构建动态应用程序的框架。

MVC

MVC,全称Model-View-Controller,是一种软件设计模式,通常用于构建用户界面。

在MVC模式中,模型(Model)负责管理应用程序的数据和业务逻辑,视图(View)负责呈现数据给用户,控制器(Controller)处理用户的输入并更新模型和视图。

MVC的主要优点是它实现了视图和模型的分离,允许开发者在不改变数据的情况下更新用户界面

MVVM

MVVM,全称Model-View-ViewModel,是MVC的衍生品,也称为MVC的增强版。

在MVVM中,有一个额外的层次,即 视图模型(ViewModel)

视图模型在视图和模型之间进行数据绑定,避免了在MVC中直接在视图和模型之间进行交互。

这使得视图和模型之间的耦合度更低,更便于维护和测试。

综上所述,MVC和MVVM的主要区别在于是否有视图模型这一层

MVC模式中,视图和模型之间的耦合度较高,而在MVVM中,通过视图模型降低了视图和模型之间的耦合度。

双向数据绑定

vue2 双向绑定原理

在 Vue 2 中,双向绑定是通过使用 Object.defineProperty 来实现的。下面是 Vue 2 中双向绑定的原理:

  1. 初始化:当创建一个 Vue 实例时,Vue 会将 data 对象中的属性转化为访问器属性,并使用 Object.defineProperty 进行定义。

  2. 数据劫持:在定义属性时,Vue 会在 getter 和 setter 中添加额外的逻辑。当访问属性时,getter 会被触发,Vue 会进行依赖收集,将正在访问的对象和属性关联起来。当修改属性值时,setter 会被触发,Vue 会通知相关的地方进行更新。

  3. 依赖追踪:Vue 会通过维护一个依赖列表来追踪属性的依赖关系。每个属性都有一个对应的 Watcher 对象,用于管理与该属性相关的依赖和更新。

  4. 响应式更新:当响应式对象的属性发生改变时,Vue 会通知与该属性相关的 Watcher 对象进行更新操作。这是通过调用 Watcher 对象的 update 方法来实现的。

  5. 批量更新:为了提高性能,Vue 2 会将多次属性的修改合并到一个批量更新中。这样可以避免不必要的重复计算和更新操作。

  6. 视图更新:一旦数据发生变化,Vue 会自动将变化应用到相关的视图上,使其保持同步。Vue 2 使用虚拟 DOM 和 diff 算法来实现视图更新,只更新发生变化的部分,并尽量减少实际的 DOM 操作。

综上所述,Vue 2 的双向绑定原理可以归纳为以下几个步骤:初始化数据 -> 数据劫持 -> 依赖追踪 -> 响应式更新 -> 批量更新 -> 视图更新

这种基于 Object.defineProperty 的双向绑定机制让 Vue 2 能够自动追踪数据的变化并将其同步到视图中。

v-model原理

v-model是Vue.js中的双向绑定指令,它可以将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时更新页面上输入控件的值。

v-model的原理: Object.defineProperty

是通过模板中的v-model指令绑定元素属性,当用户在元素中输入内容时,该属性的value值会被更新并触发 oninput事件

Vue.js监听元素oninput事件,通过新旧值的比较来确定数据是否发生变化,实现数据的双向绑定

如果用户在元素中按下回车键或者失去焦点,则该元素的onchange事件也会触发。

Vue.js同样监听元素onchange事件,并在事件处理函数中将元素值同步到Vue实例中。

使用v-model可以非常方便地实现数据和视图的双向绑定,提高前端开发效率。

vue3 双向绑定原理

Vue 3 使用了一种名为“基于 Proxy 的响应式系统”的双向绑定原理。

在 Vue 2 中,双向数据绑定是通过使用 Object.defineProperty 来实现的,但这种方法在性能和灵活性方面存在一些限制。而基于 Proxy 的响应式系统则提供了更好的性能和更灵活的特性。

下面是 Vue 3 中双向绑定的原理:

  1. 初始化:当创建一个 Vue 实例时,Vue 会对数据进行初始化,并使用 Proxy 对其进行包装。Proxy 是 ES6 提供的一个功能强大的对象拦截器,可以拦截对象的各种操作。

  2. 依赖追踪:在 Vue 3 中,每当你访问一个响应式对象的属性时,Vue 会自动追踪该属性的依赖关系。这是通过在访问属性时,将正在访问的对象和属性关联起来来实现的。

  3. 响应式更新:当响应式对象的属性发生变化时,Vue 会自动通知依赖于该属性的地方进行更新。这是通过 Proxy 拦截器中的 set 方法来实现的,在属性被修改时触发更新操作。

  4. 批量更新:为了提高性能,Vue 3 会将多次属性的修改合并到一个批量更新中。这可以避免不必要的重复计算和更新操作。

  5. 视图更新:一旦数据发生变化,Vue 会自动将变化应用到相关的视图上,使其保持同步。这是通过虚拟 DOM 和 diff 算法来实现的,只更新发生变化的部分,并尽可能地减少实际的 DOM 操作。

Vue 3 的双向绑定原理可以归纳为以下几个步骤:初始化数据 -> 追踪依赖 -> 监测属性修改 -> 批量更新 -> 视图更新。这种基于 Proxy 的响应式系统让 Vue 3 在性能和灵活性方面都有显著的提升。

示例

当你在 Vue 3 中创建一个响应式对象并进行双向绑定时,Vue 会使用基于 Proxy 的响应式系统来实现数据的自动更新。下面是一个具体的示例:

<template>
  <div>
    <input v-model="message" />
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { reactive } from 'vue';

export default {
  setup() {
    // 创建响应式对象
    const data = reactive({
      message: 'Hello, Vue 3!',
    });

    return {
      message: data.message,
    };
  },
};
</script>

在上面的代码中,我们创建了一个包含 message 属性的响应式对象 data。然后,我们将 data.message 绑定到输入框的值通过 v-model 指令,并同时使用 {{ message }} 表达式将 message 展示在 <p> 标签中。

当你在输入框中修改文本时,Vue 3 会自动更新 data.message 的值,因为它是一个响应式对象。接着,Vue 会自动将新的值更新到展示 message 的地方。

这里的双向绑定是通过 Vue 3 的响应式系统实现的。当你修改输入框中的文本时,Vue 会拦截这次修改并触发 data.message 的更新,然后更新视图。同样地,如果你在其他地方修改了 data.message 的值,相关的视图也会自动更新。

这个例子展示了 Vue 3 中双向绑定的原理,它是通过基于 Proxy 的响应式系统来实现的。通过创建响应式对象和使用 v-model 指令,你可以轻松地实现数据在视图和模型之间的双向同步。

对比 vue2响应式原理和Vue3响应式原理

Vue 2和Vue 3的响应式原理有所不同。

以下是它们的主要区别:

Vue 2的响应式原理:

  1. 在Vue 2中,Vue实例会在初始化过程中 对数据对象进行递归地遍历 ,使用Object.defineProperty方法将对象的属性转换为getter和setter。
  2. 当访问或修改这些属性时,Vue会通过getter和setter来追踪属性的依赖关系。
  3. Vue会为每个属性维护一个依赖收集器,用于跟踪属性依赖的Watcher对象。
  4. 当属性发生变化时,Vue会通知相应的Watcher对象,然后Watcher对象触发视图的更新。

Vue 3的响应式原理:

  1. 在Vue 3中,使用了 ES6的Proxy API 来实现响应式系统,该API提供了更强大和灵活的拦截器功能。
  2. 当创建一个Vue 3实例时,Vue会使用Proxy包装数据对象,并拦截对数据的访问和修改操作。
  3. 当访问数据时,Proxy会自动追踪访问的依赖关系,并建立相应的反向依赖关系。
  4. 当数据发生变化时,Proxy会自动触发相应的依赖更新,从而更新相关的组件或视图。

需要注意的是,Vue 3的Proxy API相对于Vue 2的Object.defineProperty具有更好的性能,并且能够更精确地追踪属性变化。

此外,Vue 3还引入了一些优化措施,例如基于树的依赖跟踪和批量更新,以进一步提高响应式系统的性能。

data为什么是函数?

  • 闭包设计 =>每一个组件都有自己的私有作用域,确保各组件数据不会相互干扰
  • 纯对象 => 干扰 let oj = 0

v-if 与 v-show

  • v-if:不满足条件,不会谊染dom => 单次判断
  • v-show: 隐dom => 多次切换,(不能用于权限操作)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus PromQL及传统部署 Alertmanager 发送告警

文章目录 一.PromQL 简介1.PromQL概念2.时间序列3.Prometheus数据模型4.指标名称及标签使用注意事项5.样本数据格式 二.PromQL 的数据类型1.PromQL 的表达式中支持 4 种数据类型2.时间序列选择器&#xff08;Time series Selectors&#xff09;①瞬时向量选择器由两部分组成②定…

关于智能控制领域中模糊控制算法的概述

智能控制领域中的模糊控制算法是一种基于模糊逻辑的控制策略&#xff0c;它通过对模糊集合的刻画来处理模糊信息&#xff0c;从而获得模糊输出并进行控制。模糊控制算法在实际控制工程中具有良好的应用前景&#xff0c;它不但具有较强的鲁棒性和适应性&#xff0c;而且可以为复…

Stable Diffusion 动画animatediff-cli-prompt-travel

基于 sd-webui-animatediff 生成动画或者动态图的基础功能,animatediff-cli-prompt-travel突破了部分限制,能让视频生成的时间更长,并且能加入controlnet和提示词信息控制每个片段,并不像之前 sd-webui-animatediff 的一套关键词控制全部画面。 动图太大传不上来,凑合看每…

数据仓库DW-理论知识储备

数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能&#xff0c;最后得出一些有用的数据&#xff0c;一些目标数据来使用。 采集来自不同源的数据&#xff0c;然后对这些数据进行分析和计算得出一些有用的指标&#xff0c;提供数据决策支持。 数据的来源有&#xff…

[华为杯研究生创新赛 2023] 初赛 REV WP

前言 一年没打比赛了, 差一题进决赛, REV当时lin的第三个challenge没看出来是凯撒, 想得复杂了, 结果错失一次线下机会 >_< T4ee 动态调试, nop掉反调试代码 发现处理过程为 置换sub_412F20处理(这里看其他师傅的wp知道应该是rc4, 我是直接en逆的buf字符串中每一位和…

GPIO子系统(三)

1&#xff0c;简述 GPIO 资源是相对来说较为简单&#xff0c;而且比较通用&#xff08;比如 LED 灯&#xff09;&#xff0c;而 Linux 的 GPIO 驱动属于 Linux Driver 中较为容易上手的部分&#xff0c;但是简单归简单&#xff0c;在 Linux 系统中&#xff0c;要使用 GPIO 资源…

BootStrap-前端框架

资料:https://v3.bootcss.com/components/ BootStrap的概念&#xff08;Web框架&#xff09; Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的&#xff0c;它简洁灵活&#xff0c;使得 Web 开发更加快捷。…

聚观早报 | “百度世界2023”即将举办;2024款岚图梦想家上市

【聚观365】10月13日消息 “百度世界2023”即将举办 2024款岚图梦想家上市 腾势D9用户超10万 华为发布新一代GigaGreen Radio OpenAI拟进行重大更新 “百度世界2023”即将举办 “百度世界2023”将于10月17日在北京首钢园举办。届时&#xff0c;百度创始人、董事长兼首席执…

5、docker mysql安装

1、查看版本 docker search mysql 2、下载镜像到本地 下载镜像&#xff0c;本文以5.7为例 docker pull mysql:5.7 3、创建挂载目录 mkdir /usr/local/mysql 4、创建mysql容器 docker run --name mysql-test -e MYSQL_ROOT_PASSWORDroot -p 3306:3306 -d mysql –name&am…

最详细STM32,cubeMX 按键点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上使用 按键 点亮一个LED. 文章目录 前言一、如何控制按键&#xff1f;为什么按键要接上拉电阻或者下拉电阻呢&#xff1f; 二、cubeMX配置工程自动生成代码解析 三、读取引脚电平函数四、按键为什么要消抖如何消除消抖 五、实现按键控…

如何提高MES系统的落地成功率?

导 读 ( 文/ 2768 ) 制造执行系统&#xff08;MES&#xff09;在现代制造业中扮演着至关重要的角色&#xff0c;但实施MES系统并取得成功并非易事。为了帮助企业提高MES系统的落地成功率&#xff0c;本文将介绍关键的方法和策略。通过深入了解业务需求、有效的团队合作、全面的…

基于nodejs+vue大学食堂订餐系统

模块包括主界面&#xff0c;首页、个人中心、管理员管理、用户管理、菜品管理、论坛管理、公告管理、基础数据管理、目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框…

《从菜鸟到大师之路 正则表达式 篇》

《从菜鸟到大师之路 正则表达式 篇》 正则表达式是一个强大的文本匹配工具。但是&#xff0c;对于前端初学者来说&#xff0c;众多的符号和规则可能让人难以理解。其实&#xff0c;你不需要记住所有的正则表达式语法&#xff01;本文将分享一些简单而实用的技巧&#xff0c;帮…

asp.net酒店餐饮管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net酒店餐饮管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 ASP.NE 酒店餐饮管理系统 二、功能…

HSN:微调预训练ViT用于目标检测和语义分割,华南理工和阿里巴巴联合提出

今天跟大家分享华南理工大学和阿里巴巴联合提出的将ViT模型用于下游任务的高效微调方法HSN&#xff0c;该方法在迁移学习、目标检测、实例分割、语义分割等多个下游任务中表现优秀&#xff0c;性能接近甚至在某些任务上超越全参数微调。 论文标题&#xff1a;Hierarchical Side…

第六章:路由交换机及操作系统

路由交换机及操作系统 一、路由器与交换机的作用与特点1.路由器1.1 作用1.2 特点 2.交换机2.1 作用2.2 特点 二、H3C路由器与交换机介绍1. 路由器2. 交换机 三、 H3C网络设备操作系统Comware1. 介绍2. 特点![在这里插入图片描述](https://img-blog.csdnimg.cn/2b24103028654878…

玻璃生产过程中的窑内压力高精度恒定控制解决方案

摘要&#xff1a;在玻璃生产中对玻璃窑炉中窑压的要求极高&#xff0c;通常需要控制微正压4.7Pa&#xff08;表压&#xff09;&#xff0c;偏差控制在0.3Pa&#xff0c;而窑炉压力还会受到众多因素的影响&#xff0c;所以实现高稳定性的熔窑压力控制具有很大难度&#xff0c;为…

Codeforces Round 903 (Div. 3)ABCDE

Codeforces Round 903 (Div. 3)ABCDE 目录 A. Dont Try to Count题目大意思路核心代码 B. Three Threadlets题目大意思路核心代码 C. Perfect Square题目大意思路核心代码 D. Divide and Equalize题目大意思路核心代码 E. Block Sequence题目大意思路核心代码 A. Don’t Try t…

【问题解决】【爬虫】抓包工具charles与pycharm发送https请求冲突问题

问题&#xff1a; 开启charles抓包&#xff0c;运行pycharm发送https请求报以下错误 解决&#xff1a; 修改python代码&#xff0c;发送请求时添加verify false&#xff0c;此时charles也能抓取到pycharm发送的请求 2. 关闭charles抓包&#xff0c;取消勾选window proxy

JVM第六讲:JVM 基础 - Java 内存模型引入

JVM 基础 - Java 内存模型引入 很多人都无法区分Java内存模型和JVM内存结构&#xff0c;以及Java内存模型与物理内存之间的关系。本文是JVM第六讲&#xff0c;从堆栈角度引入JMM&#xff0c;然后介绍JMM和物理内存之间的关系, 为后面JMM详解, JVM 内存结构详解, Java 对象模型详…