
Vue
文章平均质量分 89
Vue
WindRunnerMax
这个作者很懒,什么都没留下…
展开
-
Vue首屏性能优化组件
Vue首屏性能优化组件简单实现一个Vue首屏性能优化组件,现代化浏览器提供了很多新接口,在不考虑IE兼容性的情况下,这些接口可以很大程度上减少编写代码的工作量以及做一些性能优化方面的事情,当然为了考虑IE我们也可以在封装组件的时候为其兜底,本文的首屏性能优化组件主要是使用IntersectionObserver以及requestIdleCallback两个接口。描述先考虑首屏场景,当做一个主要为展示用的首屏时,通常会加载较多的资源例如图片等,如果我们不想在用户打开时就加载所有资源,而是希望用户滚动到相原创 2021-11-09 10:03:04 · 336 阅读 · 0 评论 -
初探webpack之从零搭建Vue开发环境
初探webpack之搭建Vue开发环境平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码,但这会造成我们过度依赖vue-cli,忽视了webpack的重要性,当遇到一些特殊场景时候,例如Vue多入口的配置、优化项目的打包速度等等时可能会无从下手。当然现在才开始学习vue2 + webpack可能有点晚,毕竟现在都在考虑转移到vue3 + vite了哈哈。描述文中相关的代码都在https://gi原创 2021-10-18 09:16:39 · 269 阅读 · 0 评论 -
v-html可能导致的问题
v-html可能导致的问题Vue中的v-html指令用以更新元素的innerHTML,其内容按普通HTML插入,不会作为Vue模板进行编译,如果试图使用v-html组合模板,可以重新考虑是否通过使用组件来替代。描述易导致XSS攻击v-html指令最终调用的是innerHTML方法将指令的value插入到对应的元素里,这就是容易造成xss攻击漏洞的原因了。Vue在官网对于此也给出了温馨提示,在网站上动态渲染任意HTML是非常危险的,因为容易导致XSS攻击,只在可信内容上使用v-html,永不用在用户提原创 2021-06-28 10:22:07 · 4279 阅读 · 0 评论 -
Vue中的三种Watcher
Vue中的三种WatcherVue可以说存在三种watcher,第一种是在定义data函数时定义数据的render watcher;第二种是computed watcher,是computed函数在自身内部维护的一个watcher,配合其内部的属性dirty开关来决定computed的值是需要重新计算还是直接复用之前的值;第三种就是whtcher api了,就是用户自定义的export导出对象的watch属性;当然实际上他们都是通过class Watcher类来实现的。描述Vue.js的数据响应式,通原创 2021-06-08 19:46:09 · 6291 阅读 · 4 评论 -
Vue为何采用异步渲染
Vue为何采用异步渲染Vue在更新DOM时是异步执行的,只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更,如果同一个watcher被多次触发,只会被推入到队列中一次,这种在缓冲时去除重复数据对于避免不必要的计算和DOM操作是非常重要的,然后,在下一个的事件循环tick中,Vue刷新队列并执行实际(已去重的)工作,Vue在内部对异步队列尝试使用原生的Promise.then、MutationObserver和setImmediate,如果执行环境不支持,则会采用setTim原创 2021-02-22 12:10:54 · 717 阅读 · 0 评论 -
Vue3.0新特性
Vue3.0新特性Vue3.0的设计目标可以概括为体积更小、速度更快、加强TypeScript支持、加强API设计一致性、提高自身可维护性、开放更多底层功能。描述从Vue2到Vue3在一些比较重要的方面的详细对比。生命周期的变化Vue2 -> Vue3beforeCreate -> setupcreated -> setupbeforeMount -> onBeforeMountmounted -> onMountedbeforeUpdate ->原创 2021-02-09 22:29:10 · 1005 阅读 · 2 评论 -
Vue中组件间通信的方式
Vue中组件间通信的方式Vue中组件间通信包括父子组件、兄弟组件、隔代组件之间通信。props $emit这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父子组件的通信,所谓单向数据流,就是数据只能通过props由父组件流向子组件,而子组件并不能通过修改props传过来的数据修改父组件的相应状态,所有的prop都使得其父子prop之间形成了一个单向下行绑定,父级prop的更新会向下流动到子组件中,但是反过来则不行,这样会防止从子组件意外改变父级组件的状态,导致难以原创 2021-01-28 19:27:37 · 351 阅读 · 0 评论 -
Vuex中的核心方法
Vuex中的核心方法Vuex是一个专为Vue.js应用程序开发的状态管理模式,其采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。每一个Vuex应用的核心就是store仓库,store基本上就是一个容器,它包含着你的应用中大部分的状态state。描述在大量的业务场景下,不同的模块组件之间确实需要共享数据,也需要对其进行修改操作。也就引发软件设计中的矛盾:模块组件之间需要共享数据和数据可能被任意修改导致不可预料的结果。为了解决其矛盾,软件设计上就提出了一种设计和架原创 2020-11-28 17:15:03 · 532 阅读 · 0 评论 -
Vuex和普通全局对象
Vuex和普通全局对象在构建应用时,组件化与模块化开发以及多人开发各自组件的时候,不难保证各个组件都是唯一性的,多个组件共享状态肯定是存在的,而对多个共享状态进行维护是非常麻烦的,共享状态是谁都可以进行操作和修改的,这样就会导致所有对共享状态的操作都是不可预料的,所以就需要一个统一的管理进行维护。描述在大量的业务场景下,不同的模块组件之间确实需要共享数据,也需要对其进行修改操作。也就引发软件设计中的矛盾:模块组件之间需要共享数据和数据可能被任意修改导致不可预料的结果。为了解决其矛盾,软件设计上就提出了原创 2020-11-22 11:06:29 · 599 阅读 · 0 评论 -
Vue常用性能优化
Vue常用性能优化Vue常用的一些优化方式,主要是在构建项目过程需要注意的方面。编码优化避免响应所有数据不要将所有的数据都放到data中,data中的数据都会增加getter和setter,并且会收集watcher,这样还占内存,不需要响应式的数据我们可以直接定义在实例上。<template> <view> </view></template><script> export default {原创 2020-11-14 11:55:37 · 594 阅读 · 0 评论 -
服务端渲染SSR的理解
服务端渲染SSR的理解SSR服务端渲染Server Side Render就是当进行请求时,页面上的内容是通过服务端渲染生成的,浏览器直接显示服务端返回的HTML即可。客户端渲染CSR通常在构建一个普通的SPA单页应用时,就是构建的客户端渲染的应用,CSR客户端渲染Client Side Render就是当进行请求时,页面上的内容是通过加载的Js文件渲染出来的,Js文件动态运行在浏览器上面,服务端只返回一个HTML模板。优点使得服务器计算压力变轻。做到了前后端分离,在团队开发中只要负责各自的任原创 2020-11-07 11:33:34 · 1010 阅读 · 2 评论 -
VueRouter导航守卫
VueRouter导航守卫vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航,简单来说导航守卫就是路由跳转过程中的一些钩子函数,路由跳转是一个大的过程,这个大的过程分为跳转前中后等等细小的过程,而在每一个过程中都有钩子函数,这些钩子函数能使我们在这些过程中进行一些操作,这就是导航守卫。描述vue-router一套钩子来触发路由在不同阶段触发的函数,导航守卫分成三大块:全局守卫、路由独享守卫和组件内守卫。全局守卫顾名思义所有路由在进入跳转的时候都会触发,整个全局路由分为三个阶段依次是原创 2020-11-01 17:19:29 · 412 阅读 · 0 评论 -
Vue路由懒加载
Vue路由懒加载对于SPA单页应用,当打包构建时,JavaScript包会变得非常大,影响页面加载速度,将不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这就是路由的懒加载。实现方式Vue异步组件Vue允许以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。Vue只有在这个组件需要被渲染的时候才会触发该工厂函数,且会把结果缓存起来供未来重渲染。Vue.component("async-example", function (resolve, rejec原创 2020-10-24 10:39:46 · 412 阅读 · 0 评论 -
v-model数据绑定分析
v-model数据绑定分析v-model是Vue提供的指令,其主要作用是可以实现在表单<input>、<textarea>及<select>等元素以及组件上创建双向数据绑定,其本质上就是一种语法糖,既可以直接定义在原生表单元素,也可以支持自定义组件。在组件的实现中,可以配置子组件接收的prop名称,以及派发的事件名称实现组件内的v-model双向绑定。描述可以用v-model指令在表单<input>、<textarea>及<select原创 2020-10-17 20:16:05 · 1127 阅读 · 0 评论 -
Vue路由History模式分析
Vue路由History模式分析Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,通过引入Vue-router对象模块时配置mode属性可以启用history模式。描述Vue-router的hash模式使用URL的Hash来模拟一个完整的URL,当URL改变时页面不会重新加载,而Vue-router的history模式是充分利用history.pushState的API来完成URL跳转,同样在页面跳转时无须重新加载页面,当然也不会对于服务端进行原创 2020-10-10 18:14:54 · 1777 阅读 · 0 评论 -
Vue路由Hash模式分析
Vue路由Hash模式分析Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,即使用URL的Hash来模拟一个完整的URL,当URL改变时页面不会重新加载。描述Hash符号即#原本的目的是用来指示URL中指示网页中的位置,例如https://www.example.com/index.html#print即代表example的index.html的print位置,浏览器读取这个URL后,会自动将print位置滚动至可视区域,通常使用<a&g原创 2020-10-04 16:24:19 · 1723 阅读 · 0 评论 -
Vue中computed分析
Vue中computed分析在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太多的逻辑会让模板过重且难以维护,所以对于任何复杂逻辑,都应当使用计算属性。计算属性是基于数据的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值,也就是说只要计算属性依赖的数据还没有发生改变,多次访问计算属性会立即返回之前的计算结果,而不必再次执行函数,当然如果不希望使用缓存可以使用方法属性并返原创 2020-09-26 17:05:41 · 1309 阅读 · 0 评论 -
Vue父子组件生命周期
Vue父子组件生命周期Vue实例需要经过创建、初始化数据、编译模板、挂载DOM、渲染、更新、渲染、卸载等一系列过程,这个过程就是Vue的生命周期,Vue中提供的钩子函数有beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed,父子组件嵌套时,父组件和子组件各拥有各自独立的钩子函数。描述创建过程创建过程主要涉及beforeCreate、created、beforeMount、mounte原创 2020-09-19 16:47:21 · 1660 阅读 · 0 评论 -
Vue中数组变动监听
Vue中数组变动监听Vue的通过数据劫持的方式实现数据的双向绑定,即使用Object.defineProperty()来实现对属性的劫持,但是Object.defineProperty()中的setter是无法直接实现数组中值的改变的劫持行为的,想要实现对于数组下标直接访问的劫持需要使用索引对每一个值进行劫持,但是在Vue中考虑性能问题并未采用这种方式,所以需要特殊处理数组的变动。描述Vue是通过数据劫持的方式来实现数据双向数据绑定的,其中最核心的方法便是通过Object.defineProperty原创 2020-09-12 17:14:14 · 2090 阅读 · 0 评论 -
Vue事件绑定原理
Vue事件绑定原理Vue中通过v-on或其语法糖@指令来给元素绑定事件并且提供了事件修饰符,基本流程是进行模板编译生成AST,生成render函数后并执行得到VNode,VNode生成真实DOM节点或者组件时候使用addEventListener方法进行事件绑定。描述v-on与@用于绑定事件监听器,事件类型由参数指定,表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略,用在普通元素上时,只能监听原生DOM事件,用在自定义元素组件上时,也可以监听子组件触发的自定义事件,在监听原生DOM事原创 2020-09-07 21:03:00 · 4601 阅读 · 0 评论 -
SPA单页应用的优缺点
SPA单页应用的优缺点Single Page Web Application是一种特殊的Web应用,其所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript、CSS文件,一旦页面加载完成,SPA不会进行页面的重新加载或跳转,而是利用JavaScript动态的变换HTML,默认Hash模式是采用锚点实现路由以及元素组件的显示与隐藏实现交互,简单来说SPA应用只有一个页面,通常多页面应用会有多个页面不断跳转,而单页面应用始终在一个页面中,,默认Hash模式是通过锚点原创 2020-09-01 18:00:35 · 848 阅读 · 0 评论 -
对keep-alive组件的理解
对keep-alive组件的理解当在组件之间切换的时候,有时会想保持这些组件的状态,以避免反复重渲染导致的性能等问题,使用<keep-alive>包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。描述重新创建动态组件的行为通常是非常有用的,但是在有些情况下我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来,此时使用<keep-alive>包裹组件即可缓存当前组件实例,将组件缓存到内存,用于保留组件状态或避免重新渲染,和<transition>相原创 2020-08-23 12:36:27 · 1237 阅读 · 0 评论 -
$router和$route的区别
$router和$route的区别Vue Router是Vue.js的路由管理器,路由就是SPA单页应用的访问路径,在Vue实例内部,可以通过$router访问路由实例,即在路由定义文件中export default的new Router(/*...*/)路由实例,通过$route可以访问当前激活的路由的状态信息,包含了当前URL解析得到的信息,还有URL匹配到的路由记录,可以将$router理解为一个容器去管理了一组$route,而$route是进行了当前URL和组件的映射。$router对象属性原创 2020-08-16 12:44:23 · 2165 阅读 · 0 评论 -
Vue中diff算法的理解
Vue中diff算法的理解diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结构进行重绘与回流,而diff算法能够使得操作过程中只更新修改的那部分DOM结构而不更新整个DOM,这样能够最小化操作DOM结构,能够最大程度上减少浏览器重绘与回流的规模。虚拟DOMdiff算法的基础是Virtual DOM,Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点称为V原创 2020-08-09 15:50:22 · 2523 阅读 · 0 评论 -
Vue中虚拟DOM的理解
Vue中虚拟DOM的理解Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点称为VNode,用对象属性来描述节点,实际上它是一层对真实DOM的抽象,最终可以通过渲染操作使这棵树映射到真实环境上,简单来说Virtual DOM就是一个Js对象,用以描述整个文档。描述在浏览器中构建页面时需要使用DOM节点描述整个文档。<div class="root" name="root"> <p>1</p> <div>11&l原创 2020-08-02 12:05:36 · 774 阅读 · 0 评论 -
Vue中$refs的理解
Vue中$refs的理解$refs是一个对象,持有注册过ref attribute的所有DOM元素和组件实例。描述ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上,如果在普通的DOM元素上使用,引用指向的就是DOM元素,如果用在子组件上,引用就指向组件实例,另外当v-for用于元素或组件的时候,引用信息将是包含DOM节点或组件实例的数组。<!DOCTYPE html><html><head> <title>原创 2020-07-26 11:00:13 · 1072 阅读 · 0 评论 -
v-if与v-show的区别
v-if与v-show的区别v-if指令与v-show指令都可以根据值动态控制DOM元素显示隐藏,v-if和v-show属于Vue的内部常用的指令,指令的职责是当表达式的值改变时把某些特殊的行为应用到DOM上。描述v-ifv-if指令用于条件性地渲染一块内容,这块内容只会在指令的表达式返回truthy值的时候被渲染。<div v-if="show">show</div><div v-else>hide</div>v-showv-show指令用原创 2020-07-19 10:03:05 · 651 阅读 · 0 评论 -
MVVM模式的理解
MVVM模式的理解MVVM全称Model-View-ViewModel是基于MVC和MVP体系结构模式的改进,MVVM就是MVC模式中的View的状态和行为抽象化,将视图UI和业务逻辑分开,更清楚地将用户界面UI的开发与应用程序中业务逻辑和行为的开发区分开来。描述MVVM模式简化了界面与业务的依赖,有助于将图形用户界面的开发与业务逻辑或数据模型的开发分离开来。在MVVM中的ViewModel作为绑定器将视图层UI与数据层Model链接起来,在Model更新时,ViewModel通过绑定器将数据更新到V原创 2020-07-12 10:30:44 · 1186 阅读 · 0 评论 -
Vue中$nextTick的理解
Vue中$nextTick的理解Vue中$nextTick方法将回调延迟到下次DOM更新循环之后执行,也就是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,能够获取更新后的DOM。简单来说就是当数据更新时,在DOM中渲染完成后,执行回调函数。描述通过一个简单的例子来演示$nextTick方法的作用,首先需要知道Vue在更新DOM时是异步执行的,也就是说在更新数据时其不会阻塞代码的执行,直到执行栈中代码执行结束之后,才开始执行异步任务队列的代码,所以在数据更新时,组件不会立即渲原创 2020-07-03 19:10:51 · 1117 阅读 · 0 评论 -
Vue中data为何以函数形式返回
data为何以函数形式返回在使用Vue构建组件化应用时,每个组件的data属性都是以函数形式返回的,这主要是在组件化实现的时候,每个实例可以维护一份被返回对象的独立的拷贝,而不是共享同一个对象的引用。Vue简单实例在一个Vue简单实例中,也就是不使用组件化实现的时候,data可以是一个对象,因为本身也只有一个实例,就不存在多个实例共享的问题。<!DOCTYPE html><html><head> <title>Vue</title&g原创 2020-06-27 10:03:16 · 2232 阅读 · 0 评论 -
Vue中key的作用
Vue中key的作用key的特殊attribute主要用在Vue的虚拟DOM算法,在新旧Nodes对比时辨识VNodes。如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改、复用相同类型元素的算法,而使用key时,它会基于key的变化重新排列元素顺序,并且会移除key不存在的元素。此外有相同父元素的子元素必须有独特的key,重复的key会造成渲染错误。描述首先是官方文档的描述,当Vue正在更新使用v-for渲染的元素列表时,它默认使用就地更新的策略,如果数据项的顺序被改变,原创 2020-06-09 20:15:29 · 1150 阅读 · 0 评论 -
Vue生命周期
Vue生命周期Vue实例需要经过创建、初始化数据、编译模板、挂载DOM、渲染、更新、渲染、卸载等一系列过程,这个过程就是Vue的生命周期,在Vue的整个生命周期中提供很多钩子函数在生命周期的不同时刻调用,Vue中提供的钩子函数有beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed。示例在实例化Vue过程中,会直接触发的生命周期有beforeCreate、created、beforeMo原创 2020-06-04 12:01:20 · 965 阅读 · 0 评论 -
Vue-Cli4笔记
Vue-Cli4与Vue-Cli2区别浅谈当时学习 Vue-Cli 的时候看的是 Vue-Cli2 的相关教程,当把 package.json 上传 github 的时候提醒有安全问题,于是准备使用最新版的 Vue-Cli ,我一直认为才更新到 Vue-Cli3,没想到都到Vue-Cli4了可能有很多特性在 Vue-Cli3 时就有了,做个笔记记录一下创建工程Vue-Cli4文档推荐以...原创 2020-03-11 20:06:13 · 1614 阅读 · 0 评论 -
Vue学习笔记
Vue学习笔记目录Vue学习笔记一、环境搭建1. Node.js、Npm、Cnpm2. Vue-cli二、Vue实例1. 目录结构2. 生命周期三、组件1. 组件介绍2. 使用Element UI组件库3. 创建自定义组件四、Router路由1. Router配置2. router-link router-view3. keep-alive4. 导航守卫五、方法封装1. 全局变量2. 弹窗封装...原创 2020-01-10 15:41:29 · 2035 阅读 · 0 评论