Vue.js 2 渐进式前端框架 的最佳学习方法

2023-11-03

Vue.js作为一个后起的前端框架,借鉴了Angular 、React等现代前端框架/库的诸多特点,并且
取得了相当不错的成绩。

vue.js 2

Vue.js的定位是一个渐进式框架,作者的说法是:

与其他框架的区别就是渐进式的想法,也就是Progressive——这个词在英文中定义是渐进,
一步一步,不是说你必须一竿子把所有的东西都用上。

这或许是Vue.js受到越来越多关注的一个重要原因:你只需要具备基本的HTML/JavaScript/CSS
基础,就可以快速上手,让你用上这些现代Web开发中的先进技术来提高你的生产力:

响应式编程、声明式渲染、组件化开发、虚拟DOM、跨平台支持…

vue.js 2

尽管Vue.js缺少令人眼前一亮的独创性前端开发理念,但它集中实现了最近几年前端领域技术
大跃进的诸多新理念、新技术。或许你认为这些创新起源于Angular、React或者Knockout,
但Vue.js可以无缝引导大量jQuery时代的前端工程师进入新的时代,这也是一个相当值得称赞的
巨大的成果。

与Angular和React出自巨型公司不同,Vue.js基本上是以作者(尤雨溪/Evan YOU)一己之力
完成。这或许部分解释了渐进式这一思路的来源:软件的第一使用者是其作者。

因此Vue.js更适合个人或小型团队上手 —— 你没有那么多的精力,一开始就考虑构建工具链、
测试等诸多问题。你迫切需要的,是高效地生产出,你的用户需要的产品或服务。

不过渐进式意味着Vue.js没有局限于小型应用的开发:你一样可以使用ES2015、使用构建
工具链、使用集中状态管理这些来开发大规模项目。只是,Vue.js允许你把这些东西的学习和应用,
在稍晚一些的时候引入,而不是必须先学习很多新东西才能上手。

1.Hello Vue.js 2

和其他现代前端框架一样,Vue.js也是以JavaScrip作为应用的入口,HTML只是提供一个渲染
的锚点 —— 这便利于Vue.js迁移到浏览器之外的其他平台,比如移动设备,或者服务器。

创建一个Vue.js的Hello World示例相当简单:

vue.js 2

1、引入vue.js库

  <script src="lib/vue.js"></script>

这将暴露出一个全局类——Vue,你可以用它来创建一个Vue实例。

2、创建Vue实例

Vue是一个封装了响应式开发、模板编译等诸多特性的基础类,你通过提供一些
配置项,来创建一个实例:

  var vm = new Vue({...});

一个常见的配置项是template,以类似HTML的语法来编制视图的结构:

var vm = new Vue({
  template: '<h1>Hello,Vue.js 2</h1>'
})

3、渲染Vue实例

要将Vue实例渲染到HTML页面中,采用Vue实例的$mount()方法,这个方法
的名称,意味着渲染实际上是将Vue实例生成的(虚拟)DOM子树,挂接到页面DOM中。

容易理解,$mount()方法需要指定一个定位用的DOM节点———锚点

vm.$mount(anchor_element);

Vue.js会将渲染出的DOM子树,插入锚点元素之前(并最终删除这个锚点元素)。

可以使用CSS选择符或者指定一个HTMLElement来声明锚点。例如,
下面的示例将Vue实例挂接到idapp的DOM对象处:

vm.$mount('#app');

2.使用隐式渲染

在前面的示例中,我们使用Vue实例的$mount()方法来显式地启动Vue实例
的渲染。

实际上,Vue.js也提供了一个实例化时的配置项el,来允许我们隐式地启动
Vue实例的渲染。el用来声明目标渲染锚点,例如:

Vue({
  template: '<h1>Hello,Vue.js 2!</h1>',
  el: '#app'
})

工作原理

如果Vue.js检测到你指定了el配置项,将在内部自动地执行渲染 —— 这时你
不再需要额外调用$mount()方法了:

vue.js 2

我们看到的大部分Vue.js示例代码,通常都会采用这种隐式渲染的写法。不过我认为
在开始学习时,使用仪式感更强的$mount()方法,会让你更多一点理解Vue.js
的设计思想。

3.使用HTML模板

在创建Vue实例时,如果声明了el配置项,那么你也可以省略template
选项。这时候,Vue.js将提取锚点元素的HTML内容,做为模板。

dom template

我们可以使用单一的el配置项来创建Vue实例:

var vm = new Vue({el:'#app'});

在Vue.js中,这种模板被称为HTML模板,而使用template配置项
书写的模板,被称为字符串模板

工作原理

当Vue.js发现你提供的选项中没有template属性时,将提取el属性所
指定的DOM节点的outerHTML内容作为模板内容。这类似于:

var vm = new Vue({
  el:'#app',
  template: document.querySelector('#app').outerHTML
})

Vue.js支持使用HML模板,可能一方面源于早期AugularJS的影响,另一方面
可能在于,在HTML文件中书写模板,还是比在JavaScript中写字符串来的自然。

4.模型声明与绑定

模板的存在的唯一目的,是为了和数据绑定。

Vue.js在标准HTML语法基础上,增加了一些扩展的语法来声明数据的绑定。

data binding

数据绑定语法

在Vue.js的模板中,最常见的一种数据绑定语法,是使用模板引擎Mustache
的插值写法:{{}}。例如,下面的模板绑定了实例上下文中的name变量:

<h1>{{name}}</h1>

当Vue.js渲染此模板时,将使用实例数据上下文中的name变量值,来计算最终的
渲染结果。

数据模型声明

在创建Vue实例时,使用data配置项来声明Vue实例的数据模型。

例如,下面的示例创建了一个具有初始模型{name:'Elthon John'}的Vue实例:

var vm = new Vue({
  template:'<h1>{{name}}</h1>',
  data:{
    name:'Elton John'
  },
  el:'#app'
})

Vue.js根据data配置项声明的初始模型构造数据上下文,进而和template配置项
所声明的模板执行绑定,因此,上面示例的最终渲染结果是:<h1>Elton John</h1>

5.模板的数据上下文

由于通常使用data配置项来声明Vue实例的数据模型,这容易让我们误以为
只有在data对象上声明的数据才可以与模板绑定。

当然不是这样,模板的数据上下文 = Vue实例对象

当Vue.js创建一个Vue实例时,它会将data配置项的每个根属性,(经过若干处理后)
添加为实例的根属性。

data process

因此,实际上我们可以在模板中绑定实例的任意属性。例如:下面的模板可以输出
$mount()方法的源代码:

<pre>{{$mount}}</pre>

既然如此,我们为什么需要使用data配置项来声明数据模型,而不是直接
在实例上设置数据模型呢?例如,下面的代码有什么问题呢?

var vm = new Vue({
  template:'<h1>{{name}}</h1>',
})
vm.name = 'WHOAMI';
vm.$mount('#app');

这关乎Vue.js的一个核心特性 ———— 响应式计算。

6.响应式计算机制

响应式计算是一种面向变化传播的编程范式,响应式计算模型主要包括
两个部分:数据源和(依赖于数据源的)计算过程。当数据源发生变化时,
将自动执行计算过程(比如视图的渲染过程):

reactive computing

虽然响应式计算本质上是一种通用的编程范式,但这种模型最初就是为了简化交互
式用户界面的创建和实时系统动画的绘制而提出来的一种方法,它使得我们只需要修改
数据源就可以自动更新用户界面。

Vue.js内部实现了响应式计算框架,我们在创建Vue实例时,在data配置项中声明的数据,
会被自动转换为响应式数据源,当我们修改这部分数据时,依赖于这部分数据的
计算过程 —— 例如界面渲染过程 —— 将自动被执行,因此用户界面也自动更新。

例如,对于下面的Vue实例:

new Vue({
  template:'<h1>{{counter}}</h1>',
  data: { counter: 0}
})

Vue.js将自动建立如下的响应式计算模型:

vue reactive computing

你看到,渲染计算依赖于Vue实例的counter,因此,当counter变化时,
我们将自动得到刷新的DOM视图。

7.交互行为声明

视图的作用是双向的,除了向用户展示信息,另一方面的用途在于采集用户的输入。

和数据绑定类似,Vue.js通过扩展模板的HTML语法,来声明对用户交互事件
的监听。例如,下面的模板向Vue.js框架声明了对button元素的click
事件的监听:

<button v-on:click="counter=0">RESET</button>

容易注意到button元素的特殊属性:v-on:click。在Vue.js中,这种以
v-为前缀的特殊的HTML属性,被称为指令,通常用来增强或改变所在
HTML元素的行为。例如,v-on指令的作用,就是为宿主元素(在这里是button
声明事件监听:

v-on expr

类似于Vue.js中的其他指令,v-on指令包括以下几个部分:

  • 指令名称 —— v-开始、:=之前的部分称为指令名称。在上图中,指令
    名称是v-on
  • 指令参数 —— :之后的部分称为指令的参数。在上图中,指令参数是:click
    不是所有的Vue.js的指令都 需要参数,但是对于v-on指令而言,使用参数可以
    避免为不同的事件实现不同的指令,例如,我们可以同样方式声明对hover事件的
    监听:v-on:hover="..."
  • 指令的值 —— =之后的字符串称为指令的。在上图中,指令的值是:counter=0
    不同的指令,对指令值有不同的解释。对于v-on指令,它的值表示当事件发生时
    应当执行的表达式。

指令值的执行上下文

模板的数据上下文是所属的Vue实例对象。容易理解,v-on指令的值表达式执行
的上下文也是所属的Vue实例对象,因此,在下面的示例中,当点击按钮后,Vue实例
counter属性将复位为0

new Vue({
  template:'<button v-on:click="counter=0">RESET</button>',
  data: { counter:123}
})

简化写法

为了避免大量书写v-on:前缀,Vue.js允许我们使用@来简化事件绑定的声明语法。
例如,下面的两种声明是完全等效的:

<button v-on:click="test">TEST</button>
<button @click="test">TEST</button>

8.实例方法声明

如果需要在点击鼠标时,执行一个复杂的操作,那么采用单一的表达式
作为v-on指令值就不够了 —— 我们需要将复杂的操作封装为Vue实例的
一个方法,然后将v-on指令的值设置为这个方法。

使用methods配置项来声明Vue实例的方法。当Vue.js创建一个Vue实例时,
会将methods配置项中声明的方法,挂接到Vue实例对象上:

method declare

实例方法可以直接通过实例对象调用,例如,对于上图中的vm实例:

vm.handler(); //正确

实例方法另一个常见的用途,是将方法名声明为v-on指令的值,当事件
触发时将调用该实例对象上该名称的方法。例如,下面的代码为Vue实例声明
reset方法,并将其名称作为模板中button元素的v-on指令的值:

new Vue({
  template: '<button v-on:click="reset">{{counter}}</button>',
  data: { counter: 0},
  methods: {
    reset: function(){ this.counter = 0; }
  }
})

方法函数体内的this对象

需要指出,在methods配置对象中声明的方法,其函数实现体内,this总是
指向所在的Vue实例。所以,可以在这些函数体内,直接访问通过data配置项声明
的数据,比如this.counter

9.生命周期钩子

每个 Vue 实例在被创建之前都要经过一系列的初始化过程。在这个过程中,实例也会
调用一些生命周期钩子(Lifecycle Hook) ,这就给我们提供了执行自定义逻辑
的机会。

初始化钩子

初始化钩子包括beforeCreatecreated。这两个钩子允许我们在实例被渲染
到DOM之前执行一些初始化操作。由于DOM还未就绪,在初始化钩子里,不能访问DOM
对象,实例的$el属性 —— 宿主DOM对象 —— 也没有创建:

init hook

beforeCreate是最早被调用的钩子,这时Vue.js还没有构造响应式数据源,也没
有初始化实例的事件。

created钩子里,我们可以访问响应式数据、监听实例事件。不过还没有将虚拟
DOM渲染到文档DOM树。

DOM挂载钩子

挂载钩子包括beforeMountmounted,是最常使用的钩子。这两个钩子允许我们
首次渲染*前后立即访问Vue实例。因此,如果我们需要在首次渲染前后访问或修改
DOM对象(例如,通过实例的$el属性访问宿主元素),就应该使用这两个钩子:

mount hook

beforeMount钩子在模板编译完成后、首次渲染前执行。

mounted钩子内可以自由地访问组件渲染后的DOM对象(this.$el)。这个钩子
经常被用于修改DOM、集成第三方库等操作。

更新钩子

更新钩子包括beforeUpdateupdated。每当实例需要重新渲染(例如模型发生变化等),
框架就会调用这两个钩子:

update hook

beforeUpdate钩子在模型数据变化之后、渲染周期开始之前执行。在这个钩子里我们可以
在界面渲染前获取实例属性的最新值。

updated钩子在重新渲染完成后被调用。

DOM卸载钩子

DOM卸载钩子包括beforeDestroydestroyed,当实例被从DOM树移除时执行。
这两个钩子允许我们在实例销毁前后执行一些清理或统计分析的工作:

destruct hook

beforeDestroy钩子在实例被销毁(利用,通过调用实例的$destroy()方法)之前被调用。
在这个钩子里可以清理对响应式数据的监听。

destroyed钩子在实例被销毁之后被调用,此时实例已经不剩什么东西了:-( 也可以
在这个钩子里执行一些最后时刻的清理工作,或者向远程服务器通知实例被销毁的消息。

大量相关的示例、练习和更多内容在这里:

http://xc.hubwiz.com/course/592ee9b2b343f27b0ae1ba99

vuex 2
http://xc.hubwiz.com/course/597d463fff52d0da7e3e397a

vuerouter 2
http://xc.hubwiz.com/course/5983d3aeff52d0da7e3e3d50

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js 2 渐进式前端框架 的最佳学习方法 的相关文章

  • Python中configparser读取配置

    Python中的configparser模块可以帮助开发者轻松地读取和写入配置文件 配置文件通常用于存储应用程序的设置 例如数据库连接信息 API密钥等等 在本篇博客中 我们将介绍如何使用configparser模块来读取和写入配置文件 读
  • Django 快速搭建博客 第十节(修复首页,阅读量的数据)

    写到这里 我们已经使用django博客基础开发框架什么的快开发到底了 接下来的是django进阶阶段 难度会稍微大一些 这里主要是进行一些遗漏掉的地方的 1 我们博客的首页的点击事件未实现 2 文章的阅读量未填满 对于第一点 我们只要把相应
  • Grafana loki部署及使用及问题处理方法(超详细)

    一 下载软件 因为我是本地测试 所以用的windows版本的包 loki服务window版本的安装包下载地址 下载地址 选择 promtail windows版本的安装包下载地址 下载地址 Grafana服务的下载地址 下载地址 二 配置文
  • 用R建立岭回归和lasso回归

    1 分别使用岭回归和Lasso解决薛毅书第279页例6 10的回归问题 例6 10的问题如下 输入例题中的数据 生成数据集 并做简单线性回归 查看效果 cement lt data frame X1 c 7 1 11 11 7 11 3 1
  • Flatbuffers使用解析

    Flatbuffers使用解析 在今日头条偶然看到一个技术分享视频 标题很唬人 json之后下一代数据交换格式 大致是这样 不明觉厉 赶紧打开观看 原来Flatbuffers是Google为游戏或者其他对性能要求很高的应用开发的一种数据交换
  • 不要二-网易python(找数据逻辑)

    题目描述 二货小易有一个W H的网格盒子 网格的行编号为0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x
  • Excel分割字符串

    在数据处理中我们经常会遇到分割字符的情况 比如读取csv文件 Excel提供了可视化的字符串分割方法 1 按分隔符 分割字符串 2 选择用 逗号 分割 3 结果如图
  • C++ 模板特例化

    文章目录 介绍 函数模板特例化 类模板特例化 介绍 模板作为C 泛型编程的基础十分重要 其使得一份代码能用于处理多种数据类型 而有些时候 我们会希望对一些特定的数据类型执行不同的代码 这时就需要使用模板特例化 template specia
  • Python实现常用的假设检验

    开门见山 这篇文章 教大家用Python实现常用的假设检验 服从什么分布 就用什么区间估计方式 也就就用什么检验 比如 两个样本方差比服从F分布 区间估计就采用F分布计算临界值 从而得出置信区间 最终采用F检验 建设检验的基本步骤 前言 假
  • Invalid bound statement (not found): xxxxx.UserDao.selectUserById 无法注入,无法映射详解

    在使用SSM框架时 遇到 idea报这种错误 Invalid bound statement not found xxxxx UserDao selectUserById 说明你的mybatis的配置文件并没有配好 正确模板如下
  • 安装 Hana Studio

    1 从sap 官网下载下来的安装包是 sar 类型的压缩包 2 需要用专门的解压工具 SAPCAR 3 运行sapcar 工具和安装包放到英文路径下 win r 输入cmd 输入CD SAPCAR保存路径 我的保存在 出现这种 没有打开相应
  • 数据倾斜

    数据倾斜发生时的现象 1 绝大多数task执行得都非常快 但个别task执行的极慢 2 原本能正常执行的Spark作业 某天突然爆出OOM 内存溢出 异常 观察异常栈 是我们写的业务代码造成的 数据倾斜发生的原理 在进行shuffle的时候
  • PC: 市场寒冬剖析

    市场调研机构Canalys数据显示 今年一季度 中国市场整体PC出货量同比下降24 至890万台 已是连续第五个季度下跌 今年截至618结束 都没有一家主要的PC厂商愿意发战报 PC市场怎样走出寒冬 谈谈你的理解和看法 PC 一 2022年
  • Android 数据的保存,检索,删除之Cursor

    今天遇到的一个问题是如何将数据删除后 将原来的id也相应的做改变呢 如果说对其id值进行逐个修改这也是可以的 但是当数据增多的时候 我们这么做就会很大程度上的降低程序的性能 所以我们想到的就是不要根据id的检索来获取数据库中的值 因为这样做
  • kafka权威指南中文版之三

    第三章kafka producer 向kafka写入消息 无论你将kafka作为一个消息队列 或者消息总线 还是一个数据存储平台 你都要通过生产者producer向kafka写入数据 通过消费者consumer读取kafka的数据 例如 一
  • springboot项目响应信息Jackson解析映射,key为null时抛异常解决办法

    当使用 RestController注解时 会把响应信息自动解析成json格式 使用的是Jackson 但是Jackson默认不解析key为null的映射时会抛出异常 需要增加配置 解决 import com fasterxml jacks
  • 解决Linux普通用户使用Wireshark的权限不足的问题

    dumpcap需要root权限才能使用 如果是普通用户 Wireshark就没有权限使用dumpcap进行截取封包 解决方法 将dumpcap更改为Wireshark用户组 sudo chgrp wireshark usr bin dump
  • webshell与防范

    1 WebShell的概念和危害性 WebShell就是以asp php jsp或者cgi等网页文件形式存在的 种命令执行环境 也可以称为 种网页后门 黑客在入侵网站后 通常会将WebShell后门文件与网站服务器WEB目录下正常的网页文件
  • 双指针模板

    核心思路 首先打一个 O n 2 O n 2 O n2 的暴力 然后考虑性质 当i j具有单调性的时候 那么我们才可以用双指针来优化 基础例题 最长连续不重复子
  • R语言读取Excel的神器——openxlsx

    作为非程序猿的各位同志们 可能最擅长的数据整理软件或者统计软件就是 嗯 没有错 它就是集万千宠爱于一身的E X O 咳咳咳 好了 隆重推出我们的主角 Excel 事实上 Excel是个super强大的软件 基本上用它已经能完成大量的统计分析

随机推荐

  • Unity安装VScode

    https code visualstudio com 下载好 之后 打开unity edit preference external tools open by file extension 点开 Browse 然后选 你VSCode e
  • docker 配置本地仓库才能拉取仓库镜像&目录挂载

    一 编辑daemon vim etc docker daemon json insecure registries 192 168 160 70 5000 重启docker服务 systemctl restart docker servic
  • SVN更新文件 有时候会报skipped, remains conficted

    有时进行SVN更新文件时 会报skipped remains conficted 如下图 遇到这种问题时 三大步可以解决问题 步骤如下 Step1 回退到该文件的上一级目录 右键选择TortoiseSVN 然后选择下级菜单中的Clean u
  • 使用C++实现的仿Wallpaper动态壁纸软件(含源文件)

    在上一篇博客中 已经介绍了wallpaper的实现原理 并用C 实现 本文将使用C 和Qt框架实现 由于之前已经介绍过具体思路 本文将跳过分析过程 直接上代码 新建Qt项目 系统自动生成widget h widget cpp main cp
  • 责任链模式(Chain)

    前言 责任链模式在很多框架中都有体现 比如Spring Mybatis等 概念 使多个对象都有处理请求的机会 从而避免了请求的发送者和接收者之间的耦合关系 将这些对象串成一条链 并沿着这条链一直传递该请求 直到有对象处理它为止 责任链模式的
  • 前端常用代码

    ajax请求demo KaTeX parse error Expected got EOF at end of input son url ctx camera capture getListJson action capture came
  • lightGBM专题2:基于pyspark在spark平台下lightgbm训练详解

    数据集 这里以数据集flight weather csv为例 文件下载地址 flight weather csv 将flight weather csv上传到hdfs 这里上传到目录 home 必须在hdfs下读取指定目录的文件 数据读取
  • 服务器虚拟多主机,服务器虚拟多台主机

    服务器虚拟多台主机 内容精选 换一换 主机迁移服务是一种P2V V2V迁移服务 可以帮您把X86物理服务器或者私有云 公有云平台上的虚拟机迁移到华为云弹性云服务器上 从而帮助您轻松地把服务器上的应用和数据迁移到华为云 特点 界面化操作 简单
  • linux命令整理

    pwd 在两个不同目录下使用此命令 ls 长格式 短格式 多个短格式组合使用 cd 上一级目录 下一级目录 相对路径使用 绝对路径使用 特殊符号使用 less more 注意找区别 less的作用与more十分相似 不同点为less命令允许
  • linux下生成静态库.a与动态库.o的方法流程

    比如我们随便从github下载一个zlib的开源库 作者都是告诉了我们这个库的使用方法 并写好了MakeLists txt了 所以直接 先建立一个build文件夹 用来存放生成的编译文件 gt 接着cmake gt 再make 编译后得到了
  • vmware VSAN 双节点部署

    一 环境 ESxi主机 01 192 168 2 26 ESxi主机 02 192 168 2 27 见证主机 虚拟机 192 168 2 157 部署在ESxi 主机01上 注 此操作官方不推荐 192 168 2 26虚拟交换机配置如下
  • Python中default()函数

    阅读textual inversion代码的时候 遇到这样一个用法 def p losses self x start t noise None noise default noise lambda torch randn like x s
  • 【python】运行/调用/执行/终止/重启.exe文件

    一 运行 调用 执行 打开 exe文件 1 os system cmd command 使用 import os os system cmd command 括号里输入的参数即为在cmd里面输入的内容 具体格式参照这个连接 python中o
  • UE5实现距离测量功能

    文章目录 1 实现目标 2 实现过程 2 1 Widget 2 2 蓝图实现 3 参考资料 1 实现目标 UE5在Runtime环境下测量两个空间点位之间的绝对距离 并支持多段线的距离测量 GIF动图如下所示 2 实现过程 实现原理比较简单
  • Django新增自定义模板函数

    Django新增自定义模板函数 1 创建templatetags文件 2 创建一个 py文件 coding utf 8 from django import template register名称不可改 register template
  • 【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问

    目录 一 虚拟头节点 二 数组的随机访问 三 动态数组 链表复杂度分析 四 动态数组 add E element 复杂度分析 五 动态数组的缩容 一 虚拟头节点 为了让代码更加精简 统一所有节点的处理逻辑 可以在最前面增加一个虚拟的头节点
  • mybatis-plus设置主键自增 ,获取自增主键id

    第一步 实体类加注解 在主键上加 TableId type IdType AUTO 注解 第二步 在数据库设置主键自增 第二种 可以在mapper插入标签中添加keyProperty id useGeneratedKeys true
  • Courses

    点击打开链接 Problem Description Consider a group of N students and P courses Each student visits zero one or more than one co
  • 网络编程-----socket函数

    1 Socket 函数 访问底层操作系统接口的全部方法 提供服务中心类 简化网络服务器的开发 语法 socket socket family type proto family 套接字家族可以是 AF UNIX 或者 AF INET typ
  • Vue.js 2 渐进式前端框架 的最佳学习方法

    Vue js作为一个后起的前端框架 借鉴了Angular React等现代前端框架 库的诸多特点 并且 取得了相当不错的成绩 Vue js的定位是一个渐进式框架 作者的说法是 与其他框架的区别就是渐进式的想法 也就是Progressive