当前位置: 首页 > news >正文

vue升级题

不熟悉的:

2,

3.你用过befcoreDetory 吗?清除定时器,第一个和第二个再看一下

实例加载完成是在哪个生命周期--beforecreate

7.父子组件生命周期执行顺序?为什么这么渲染?场景

8.简单描述每个周期具体适合那些场景?(需要在问)

只是钩子,触发事件

每个生命周期的钩子函数去做这个事情,不是执行

你卸载的时候会触发这个钩子

9

10

13.v都是语法糖;v-model只能用一次,sync可以父子组件的数据达到同步

16:v-on;v-bind的原理

18

21.vue-loader:解析vue文件;template-解析成html;script标签解析成js,style里的东西解析成css

是webpack中的

、允许用单文件

怎么实现

diff-vdom看下源码

22.diff算法用了key;

24:

26:

27:

28
30

33.Vue的路由实现:hash模式和history模式

35-37

38

40

41:active-class 

说下route-link原理:点击跳转;写个div 加一个点击事件原理;to:跳转到的页面

42:keep-live最多能缓存几个;缓存的这个机制是怎么实现的

标签页缓存

-50

1.vue怎么实现的减少了dom的操作,因为我们只需要关注数据就可以

https://blog.csdn.net/qq_40055200/article/details/134630413?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134630413%22%2C%22source%22%3A%22qq_40055200%22%7D
 

vue 双向绑定的源码实现 

这段代码实现了一个简化版的Vue双向绑定,主要包括以下几个部分:

  • defineReactive 函数:使用 Object.defineProperty 定义对象的属性,实现数据的响应式绑定。
  • observe 函数:遍历对象的属性,对每个属性调用 defineReactive 进行响应式绑定。
  • compile 函数:编译模板,找到带有 v-model 属性的节点,并监听其输入事件,实现双向绑定。
  • compileNode 函数:编译文本节点,将模板中的 {{}} 表达式解析为对应的数据,并创建一个 Watcher 对象进行监听。
  • compileFragment 函数:递归遍历模板中的所有节点,调用 compileNode 进行编译。
  • Vue 构造函数:初始化 Vue 实例,将 data 数据进行响应式绑定,并编译模板。
  • Watcher 对象:观察者对象,用于监听数据变化并更新视图。
  • Dep 对象:依赖收集对象,用于管理和通知所有的观察者对象。
function defineReactive(obj, key, val) {Object.defineProperty(obj, key, {enumerable: true,configurable: true,get: function reactiveGetter() {// 在读取属性值时,进行依赖收集// ...return val;},set: function reactiveSetter(newVal) {if (newVal === val) {return;}// 在更新属性值时,触发更新// ...val = newVal;}});
}function observe(obj) {if (typeof obj !== 'object' || obj === null) {return;}Object.keys(obj).forEach(function(key) {defineReactive(obj, key, obj[key]);});
}function compile(node, vm) {if (node.nodeType === 1) {var attrs = node.attributes;for (var i = 0; i < attrs.length; i++) {if (attrs[i].nodeName === 'v-model') {var exp = attrs[i].nodeValue;node.value = vm[exp];node.addEventListener('input', function(e) {// 监听输入事件,更新数据vm[exp] = e.target.value;});node.removeAttribute('v-model');}}}
}function compileNode(node, vm) {var reg = /\{\{(.*)\}\}/;if (node.nodeType === 1) {compile(node, vm);} else if (node.nodeType === 3 && reg.test(node.nodeValue)) {var exp = RegExp.$1;exp = exp.trim();new Watcher(vm, exp, function(value) {// 监听数据变化,更新视图node.nodeValue = value;});}
}function compileFragment(fragment, vm) {var childNodes = fragment.childNodes;Array.prototype.slice.call(childNodes).forEach(function(node) {compileNode(node, vm);if (node.childNodes && node.childNodes.length > 0) {compileFragment(node, vm);}});
}function Vue(options) {this.$options = options;this._data = options.data;observe(this._data);var compiled = document.createDocumentFragment();this.$el = document.querySelector(options.el);compiled.appendChild(this.$el.cloneNode(true));compileFragment(compiled, this);this.$el.parentNode.replaceChild(compiled, this.$el);
}function Watcher(vm, exp, cb) {this.vm = vm;this.exp = exp;this.cb = cb;this.value = this.get();
}Watcher.prototype = {update: function() {var newVal = this.vm[this.exp];if (newVal !== this.value) {this.value = newVal;this.cb.call(this.vm, newVal);}},get: function() {Dep.target = this;var value = this.vm[this.exp];Dep.target = null;return value;}
};function Dep() {this.subs = [];
}Dep.prototype = {addSub: function(sub) {this.subs.push(sub);},notify: function() {this.subs.forEach(function(sub) {sub.update();});}
};Dep.target = null;

 

2.v-model怎么实现的

3.

相关文章:

  • 电子学会C/C++编程等级考试2021年09月(三级)真题解析
  • C#,《小白学程序》第十八课:随机数(Random)第五,方差及标准方差(标准差)的计算方法与代码
  • 1panel在应用商店里面安装jenkins
  • LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  • C_5练习题
  • leetcode面试经典150题——31 无重复字符的最长子串(方法二极简代码!!!)
  • 操作系统题目分类总结 | 进程管理 内存管理 文件系统 设备管理
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(二十二)
  • HCIP中期实验
  • CentOS7安装Docker运行环境
  • Echarts title标题配置项的使用 更改颜色 副标题
  • 【数据库】缓冲区管理器结构,几种常用替换策略分析,pin钉住缓冲区块防止错误的替换,以及缓冲区管理带来的代价优化
  • BERT-pytorch源码实现,解决内存溢出问题
  • Java入坑之模块化
  • MCU常用文件格式
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 03Go 类型总结
  • 07.Android之多媒体问题
  • 2017-08-04 前端日报
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Docker 笔记(2):Dockerfile
  • JavaScript 奇技淫巧
  • overflow: hidden IE7无效
  • python 学习笔记 - Queue Pipes,进程间通讯
  • text-decoration与color属性
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 全栈开发——Linux
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用 Docker 部署 Spring Boot项目
  • 数据可视化之 Sankey 桑基图的实现
  • 算法之不定期更新(一)(2018-04-12)
  • 问题之ssh中Host key verification failed的解决
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​secrets --- 生成管理密码的安全随机数​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #FPGA(基础知识)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (12)目标检测_SSD基于pytorch搭建代码
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (8)STL算法之替换
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (pojstep1.1.2)2654(直叙式模拟)
  • (待修改)PyG安装步骤
  • (第二周)效能测试
  • (独孤九剑)--文件系统
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)负载均衡,回话保持,cookie
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ../depcomp: line 571: exec: g++: not found
  • .NET : 在VS2008中计算代码度量值
  • .net core使用ef 6
  • .NET Framework 4.6.2改进了WPF和安全性