当前快讯:中国电科陈志龙,我替你深感不值!再等等中央巡视组就来了!
中国电科陈志龙,我替你深感不值!再等等中央巡视组就来了!,国企,加班,陈志龙,法学家,科学家,中国电科,中央巡视组
Vue.js是一个流行的JavaScript框架,它使得构建复杂的交互式应用程序变得更容易。Vue.js基于MVVM模式设计,采用了响应式数据绑定和组件化的架构。在Vue.js中,数据绑定是非常重要的概念,它通过使用观察者模式来追踪数据变化并自动更新DOM。
Vue.js源码是一个庞大而复杂的项目,但通过掌握其核心概念,我们可以更好地理解其工作原理。在本文中,我们讨论了Vue.js的响应式数据绑定、虚拟DOM、模板编译、组件、生命周期钩子、事件处理和指令等关键知识点。了解这些知识点可以让我们更好地编写Vue.js应用程序,并深入了解Vue.js的工作原理
(资料图片仅供参考)
Vue.js提供了计算属性和侦听器来处理数据的变化。计算属性是用于计算和缓存的属性,而侦听器则允许你监听数据的变化并执行特定的操作。这两个概念都是基于Vue.js的响应式数据绑定实现的。
计算属性的实现是通过使用Object.defineProperty()方法来定义getter和setter方法。当计算属性依赖的数据发生变化时,计算属性会重新计算,这样可以避免重复计算。侦听器则是通过使用Watcher对象来实现的。
Virtual DOM是Vue.js的一个核心概念,它是一个“轻量级”的DOM副本,作为内存中的JavaScript对象存在。每次数据发生变化时,Vue.js会计算需要更新的最小DOM子树,然后只更新这些部分。这种方法比直接操作真实DOM要快得多。
在Vue.js中,虚拟DOM由VNode类来表示。VNode类有一些属性:tag、data、children等。VNode实例通常通过createElement()方法创建,该方法返回一个VNode实例。
Vue.js使用模板来描述应用程序的界面,而模板编译是将模板转换为渲染函数的过程。在Vue.js中,模板编译是由template编译器来处理的。它将模板解析为AST(抽象语法树),然后将AST转换为渲染函数。
Vue.js的模板编译器是独立的,可以在浏览器中运行。在开发环境中,模板编译器会被自动加载,并且Vue.js还提供了一个单独的运行时构建,不包含模板编译器。这意味着你需要在构建工具中对模板进行预编译,或者使用手动渲染函数。
组件是Vue.js的另一个核心概念,它允许你构建可重用和可组合的UI组件。在Vue.js中,每个组件都是一个Vue实例,并且可以包含其他组件。组件可以接收属性(props)和发射事件,以便与其他组件进行通信。
Vue.js中的组件是通过Vue.extend()方法来创建的。该方法将基本Vue类与组件定义合并,并返回一个新的构造函数。然后可以在应用程序中使用自定义标记(例如
Vue.js的生命周期钩子是一系列函数,它们定义了Vue实例在不同阶段执行的操作。这些阶段包括:创建、挂载、更新和销毁。生命周期钩子可以在Vue实例的选项对象中定义。
在Vue.js中有7个生命周期钩子:
created: 在Vue实例创建后调用,但在模板渲染之前。
mounted: 在Vue实例挂载到DOM上后调用。
updated: 在Vue实例数据被更新后调用,但在DOM重新渲染之前。
destroyed: 在Vue实例销毁之前调用。
beforeCreate: 在Vue实例创建之前调用。
beforeMount: 在Vue实例挂载到DOM之前调用。
beforeUpdate: 在Vue实例数据更新之前调用,但在DOM重新渲染之前。
在Vue.js中,你可以使用v-on指令来绑定DOM事件。例如,你可以使用v-on:click来监听点击事件。事件处理程序可以是内联函数,也可以是Vue.js组件的方法。事件处理程序可以接收一个事件对象作为参数。
在Vue.js的事件处理中,事件是经过封装的。在组件内部使用$emit方法触发事件,在组件之间使用$on来监听事件。这样可以避免直接操作dom元素,使代码更加清晰和易于维护。
Vue.js中的指令是特殊的HTML属性,它们可以用于指定某些特殊行为。例如,v-if和v-for指令用于条件渲染和循环渲染。指令可以接收表达式作为参数,并可以在表达式变化时进行更新。
Vue.js提供了一些内置指令,包括v-model、v-bind、v-on等。我们可以自定义指令来扩展Vue.js的功能。自定义指令需要使用Vue.directive()方法来定义。
MVVM是Model-View-ViewModel缩写,也就是把MVC中的Controller演变成ViewModel。Model层代表数据模型,View代表UI组件,ViewModel是View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据。
父子组件通信
父->子props,子->父 $on、$emit获取父子组件实例 parent、parent、children Ref 获取实例的方式调用组件的属性或者方法 Provide、inject
官方不推荐使用,但是写组件库时很常用
兄弟组件通信
Event Bus 实现跨组件通信 Vue.prototype.$bus = new Vue() Vuex
跨级组件通信
$attrs、$listeners Provide、inject
对于Vue 这类渐进式前端开发框架,为了构建SPA(单页面应用),需要引入前端路由系统,这也就是Vue-router存在的意义。前端路由的核心,就在于改变视图的同时不会向后端发出请求。
1、hash ——即地址栏URL中的#符号,它的特点在于:hash 虽然出现URL中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。
2、history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法。这两个方法应用于浏览器的历史记录站,在当前已有的back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改是,虽然改变了当前的URL,但你浏览器不会立即向后端发送请求。history模式,会出现404 的情况,需要后台配置。
当一个Vue实例创建时,Vue会遍历data选项的属性,用 Object.defineProperty 将它们转为 getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher重新计算,从而致使它关联的组件得以更新。
initProxy:作用域代理,拦截组件内访问其它组件的数据。
initLifecycle:建立父子组件关系,在当前组件实例上添加一些属性和生命周期标识。如Math Processing Errorparent,parent,refs,$children,_isMounted等。
initEvents:对父组件传入的事件添加监听,事件是谁创建谁监听,子组件创建事件子组件监听
initRender:声明Math Processing Errorslots和slots和createElement()等。
initInjections:注入数据,初始化inject,一般用于组件更深层次之间的通信。
initState:重要)数据响应式:初始化状态。很多选项初始化的汇总:data,methods,props,computed和watch。
initProvide:提供数据注入。
思考:为什么先注入再提供呢??
1、首先来自祖辈的数据要和当前实例的data,等判重,相结合,所以注入数据的initInjections一定要在InitState的上面。
从上面注入进来的东西在当前组件中转了一下又提供给后代了,所以注入数据也一定要在上面。keep-alive是Vue的内置组件,实现组件缓存。当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁。
keep-alive是系统自带的一个组件,用来缓存组件,避免多次加载相同的组件,减少性能消耗,提高用户体验。
例如我们可以在列表页进入详情页使用。如果在列表页点击的都是相同的 ,详情页就不用请求多次了,直接缓存起来就行了,如果点击的不同,则需要重新请求数据
vuex是一个专门为vue.js应用程序开发的状态管理库。 核心概念:
state(单一状态树) getter/Mutation显示提交更改state
Action类似Mutation,提交Mutation,可以包含任意异步操作。
module(当应用变得庞大复杂,拆分store为具体的module模块)
在js中,渲染真实DOM的开销是非常大的, 比如我们修改了某个数据,如果直接渲染到真实DOM, 会引起整个dom树的重绘和重排。那么有没有可能实现只更新我们修改的那一小块dom而不要更新整个dom呢?此时我们就需要先根据真实dom生成虚拟dom, 当虚拟dom某个节点的数据改变后会生成有一个新的Vnode, 然后新的Vnode和旧的Vnode作比较,发现有不一样的地方就直接修改在真实DOM上,然后使旧的Vnode的值为新的Vnode。
diff的过程就是调用patch函数,比较新旧节点,一边比较一边给真实的DOM打补丁。在采取diff算法比较新旧节点的时候,比较只会在同层级进行。 在patch方法中,首先进行树级别的比较 new Vnode不存在就删除 old Vnodeold Vnode 不存在就增加新的Vnode 都存在就执行diff更新 当确定需要执行diff算法时,比较两个Vnode,包括三种类型操作:属性更新,文本更新,子节点更新 新老节点均有子节点,则对子节点进行diff操作,调用updatechidren 如果老节点没有子节点而新节点有子节点,先清空老节点的文本内容,然后为其新增子节点 如果新节点没有子节点,而老节点有子节点的时候,则移除该节点的所有子节点 老新老节点都没有子节点的时候,进行文本的替换
updateChildren 将Vnode的子节点Vch和oldVnode的子节点oldCh提取出来。 oldCh和vCh各有两个头尾的变量StartIdx和EndIdx,它们的2个变量相互比较,一共有4种比较方式。如果4种比较都没匹配,如果设置了key,就会用key进行比较,在比较的过程中,变量会往中间靠,一旦StartIdx>EndIdx表明oldCh和vCh至少有一个已经遍历完了,就会结束比较。
关键词:
中国电科陈志龙,我替你深感不值!再等等中央巡视组就来了!,国企,加班,陈志龙,法学家,科学家,中国电科,中央巡视组
金投网提供工商银行如意金条价格今天多少一克(2023年04月05日),工商银行如意金条价格最新消息(2023年04月05日)
北京消协发布清明节消费提示:谨慎选择“代客祭扫”等新追思方式
智通财经APP获悉,据S3 Partners的一份分析报告显示,近几周全球卖空者加大了对多伦多道明银行(TD US)的看空赌注,目前对其的押注约为37亿美元
中新网福州4月4日电(王昊)福州海警局4日披露,近日,福州海警局在辖区内查获1起涉嫌走私烟丝案,抓获涉案人员5人,查扣涉
本报讯(记者张颖珍)3月31日上午,由市民政局、蕉城区民政局、东侨开发区社会事务局主办的“推进‘五社联动’关爱‘一小一老’”主题宣传活动
近日,国务院新闻办公室举行新闻发布会,国家互联网信息办公室有关负责人介绍了2023年“清朗”系列专项行动的相关情况,表示
据美国有线电视新闻网(CNN)当地时间4日消息,美国前总统特朗普在其自创的社交媒体平台上发布了他当天被传讯出庭的反应。资料图“这次听证会
【美股成交额前20:C3 ai重挫26%创最大单日跌幅;银行板块普跌财报恐成“重灾区”】周二美股银行板块普遍走低。第15名美国银行收跌2 13%,成交
1、套装的选择面试服装少不了西服套装。2、西服套装不一定要追求名牌,但是一定要得体大方。3、女性的套装中有裙子和裤子的区
在房地产市场影响之下,物企回归服务本质,更加考验其独立发展能力。3月31日,远洋服务召开2022年度业绩发布会。管理层针对2022年度业绩做出解
4月4日,萧山区进化镇召开民生福祉共享工作推进大会暨“进心善治”乡村治理品牌发布会。今年以来,进化镇不断深化“专班化运作
一、舟山最新疫情消息-数据概览:1、新增本土:0;2、新增无症状:0;3、现有确诊:65;4、累计确诊:95;5、累计治
近日,我们从官方渠道获悉,东风本田CR-V新增加一款1 5T两驱睿型版车型,官方指导售价21 09万元。
《改革方案》强调,学科专业设置调整优化改革要面向世界科技前沿、面向经济主战场、面向国家重大需求、面向人民生命健康,引导高校在各自领域
印度政府将在2028年3月之前安装250GW的可再生能源容量。该公告是提高非化石燃料能源产能的更广泛计划的一部分,包括太阳能和风能以及核能和水
2023卫生资格考试准考证打印入口由卫生 护士考试栏目提供,查找更多考试报名资讯、准考证打印、成绩查询或2023卫生资格考试准考证打印入口请访
1、另外其出版的还有:《深海里的星星Ⅰ》《深海里的星星Ⅱ》作者:独木舟、《如果不能够永远走在一起》作者:童馨儿、《大神
马特奥-科瓦契奇在斯坦福桥的合同到2024年夏天,但是目前他还没有与切尔西签署续约合同。按照《足球内幕》的说法,这位克罗地亚中场可能会在夏
瑞银在拉丁美洲地区客户管理的财富规模约为1500亿美元,加上通过收购瑞士信贷获得的800亿美元,瑞银将超越摩根大通,成为拉丁美洲最大的财富管
据日本《东京新闻》4月4日报道,关于福井县敦贺核电站2号机组重新启动的审查,运营该核电站的日本原子力发电公司提供的资料存
宁波东力00216404月04日在投资者关系平台上答复了投资者关心的问题投资者董秘您好请问截止至2023年3月31日公司股东数多少户谢谢宁波东力董秘您
《消逝的光芒2》外观DLC“狂鸡捆绑包”现已正式上线,之前错过“炸蛋狩猎”活动的玩家现在可以再次获得雄鸡服装了,Steam国区定价22元,首发优
当地时间3月30日,美国纽约州一个大陪审团表决同意以刑事罪名起诉特朗普,这是美国历史上首次有前总统受到刑事指控。据当地媒体报道,当地时间
两场客场失利,山东高速男篮并非一无所获,多变打法已经逐步成型,王晗,贾诚,内线,陶汉林,广东男篮,山东高速男篮