为什么选择Vue

通过一个对比,展示vue框架的优势:

需求:根据请求后端接口返回的数据列表,渲染在页面中。

传统上我们使用jQueryAjax发送http请求,获取数据。判断列表数据是否存在,如果不存在,显示一条提示信息;如果存在,则显示出来。

    <ul class="js-data"></ul>
    <script>
$(document).ready(function () {
$.get("https://example.com/api/data")
.then( function (res) {
var $ul = $(".js-data") if (!res.data.length) {
var $noItem = $("<li>")
$noLi.text("sorry, there are no data")
$ul.append($noItem)
} else {
res.data.forEach( function (item) {
var $li = $("<li>").text(item)
$ul.append($li)
})
}
})
})
</script>

DEMO 1-1 jQuery create list

jQuery 这段代码执行了以下逻辑:
1. 使用$.get()发起Ajax,获得数据列表;
2. 获得要挂载列表的ul元素;
3. 如果请求响应的结果中没有数据,则创建一个li元素,显示一段提示文本;
4. 如果有数据,则遍历每一个数据项目,将数据内容添加至li元素中;
5. 并将li元素挂载到ul元素上。

在这个例子js中,我们不仅要处理数据(请求数据,并判断响应的数据是否存在),还要处理视图中的DOM元素(创建li元素,并挂载到ul元素中)。

下面我们用VUE框架来处理上面的需求

    <ul class="js-items">
<li v-if="!items.length">sorry, thert are no data</li>
<template v-else>
<li v-for="item in items">{{ item }} </li>
</template>
</ul>
    <script>
new Vue({
el: ".js-items",
data: {
items: []
},
created() {
fetch("https://example.com/api/data")
.then(res = > {
this.items = res.data.items
})
}
})
</script>

DEMO 1-1 Vue create list

VUE 这段代码执行了以下逻辑:
1. 使用fetch()发起了一个Ajax请求;(当然也可以用其它请求API,如axios)
2. 将返回数据赋值给data对象中的items属性

在VUE这个例子中,我们只需要按VUE的语法写好HTML部分,然后在script中请求数据,并完成赋值,视图会自动更新,与上面jQuery呈现的页面完全一样。

在VUE这里,视图HTML部分和逻辑JS部分完全分开,只专注于各自的业务,我们不用在js中操作DOM,VUE框架的内部会自动帮我们处理。这就是MVVM模式,View(视图) 和 Model(数据) 分离,由框架核心ViewModel控制两者关联。

Vue的MVVM模型

关于MVC / MVP / MVVM 理解可以查看阮一峰的blog

在web应用中,最底层最基础的结构是HTML / CSS / Javascript。分别处理页面的结构、样式、行为。

换个角度看,我们也可以把页面划分为视图层和逻辑层。视图层由HTML/CSS处理,逻辑层由JS处理。

按这样划分,我们学习的方向就是VUE框架是如何控制视图层显示,以及如何与逻辑层交互的。

VUE将视图层HTML抽象为一个模板template,作为VUE实例的template属性的值,模板中HTML元素通过指令directive来建立视图层view和viewModel的联系。

VUE向视图层view提供API叫做指令

VUE向逻辑层model提供的API包括data/methods/computed/watch/filter/component等等。

DEMO 1-1 view / mode

vue在template中实现视图逻辑,在js中实现业务逻辑

上面的例子,我们也可以改为下面的写法,以便更好理解:

    <div id="app"></div>
    <script>
new Vue({
// 视图层view
template: `<ul class="js-items">
<li v-if="!items.length">sorry, thert are no data</li>
<template v-else>
<li v-for="item in items">{{ item }} </li>
</template>
</ul>`, // 逻辑层model
el: "#app",
data: {
items: []
},
created() {
fetch("https://example.com/api/data")
.then(res = > {
this.items = res.data.items
})
}
})
</script>

Vue: The Progressive Framework

vue 是一个渐近式框架

参考《深入浅出Vue.js》第一章 p3

vue 的主要历史

  • 2013年7月28日 尤雨溪在GitHub上提交第一个commit。此时还不叫vue,叫Element,后又更名为Seed.js
  • 2013年12月7日 发布v 0.6.0版,正式更名为Vue.js,并且把指令系统写法改为v-。这一版本代表vue正式问世
  • 2015年10月26日 正式发布v 1.0.0
  • 2016年10月1日 国庆 发布v 2.0.0

vue定位变化

在最早期的vue只专注于视图层,没有路由,没有状态管理,也没有官方构建工具,只是一个库,相当一个新的视图模板库。

后来,为了适应不同应用场景,慢慢加入了一些官方辅助工具,如路由Router、状态管理Vuex等。

但是在这个演变发展过程中,vue始终维持一个理念:”这个框架应该是渐近式

也就是vue的目前的定位:The Progressive Framework

vue 渐近式框架的理解

所谓渐近式框架,就是把框架分层。

最核心的部分是视图渲染,然后往外是组件机制,在此基础上加入路由机制,加入状态管理,添加单元测试,使用构建工具等。除了核心部分,其它部分都可以根据项目应用的需求添加,不是必需的。

用一张图理解渐近式的概念

本节是 vue-learning系列 的开篇,对核心部分的基础内容,学习总结已经完成并发布,点击下方链接可直达内容目录。

vue-learning系列:核心部分学习总结

vue-learning:1 - 为什么选择vue的更多相关文章

  1. 《vue.js快跑》总结:为什么选择VUE

    2019-3-31 为什么选择Vue 有这个一个需求,我们需要根据后端数据接口请求返回的数组在页面中按列表展示? 传统上我们使用jQuery的Ajax发送http请求,获取数据.判断列表数据是否存在, ...

  2. Vue Learning Paths

    Vue Learning Paths Vue Expert refs https://vueschool.io/articles/vuejs-tutorials/exciting-new-featur ...

  3. 我们为什么选择VUE来构建前端

    很多使用过VUE的程序员,对VUE的评价是"Vue.js 兼具angular.js和react.js的优点,并剔除了它们的缺点". 那么,他真的值得这么高的评价嘛? Vue.js的 ...

  4. 简单vue项目脚手架(vue+webpack2.0+vuex+vue-router)

    github地址 使用技术栈 webpack(^2.6.1) webpack-dev-server(^2.4.5) vue(^2.3.3) vuex(^2.3.1) vue-router(^2.5.3 ...

  5. 【Vue】详解Vue组件系统

    Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用—— 全局注册 通过Vue.comp ...

  6. 【Vue】浅谈Vue(一):从模板语法数据绑定、指令到计算属性

    写在前面 今年前端届比较有意思,从大漠穷秋发表文章比较angular和vue,继而致歉vue作者.社区,从谷歌辞去Angular Developer PM in China一职并且呼吁大家停止各种无谓 ...

  7. 前端笔记之Vue(一)初识SPA和Vue&webpack配置和vue安装&指令

    一.单页面应用(SPA) 1.1 C/S到B/S页面架构的转变 C/S:客户端/服务器(Client/Server)架构的软件. C/S 软件的特点: ① 从window桌面双击打开 ② 更新的时候会 ...

  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十七 ║Vue基础:使用Vue.js 来画博客首页+指令(一)

    缘起 书说前两篇文章<十五 ║ Vue前篇:JS对象&字面量&this>和 <十六 ║ Vue前篇:ES6初体验 & 模块化编程>,已经通过对js面向对 ...

  9. 简简单单的Vue4(vue-cie@3.x,vue’Debug[调试],vue‘sHttp)

    既然选择了远方,便只顾风雨兼程! __HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 vue-cli@3.x 创建项目 Vue的Debug(调试) Vue的Http请求 提 ...

随机推荐

  1. MSSQL → 01:SQLServer 2008概述及安装

    据库的发展史 在人类诞生以来,就有记录数据的需求,在远古时代就有了结绳记事的故事,而随着科技的进步,我们记录数据的方式也发生了天翻地覆的变化,从效率低.规模小.不能适应信息高速发展的需要的手工或者简单 ...

  2. poj2125 最小点权覆盖集

    题意:有一张图,对于每个点,有出边和入边,现在目的是删除改图的所有边,对于每个点,删除出边的花费Wi-,删除入边的花费Wi+,现在的目的求删去所有边后的花费最小. 建图方法:对于每个点i,拆点为i,i ...

  3. 集合--List&&ArrayList-LinkedList

    1.8新特性  List接口中的replaceAll()方法,替换指定的元素,函数式接口编程 List  元素是有序的并且可以重复 四种add();方法 ArrayList(用于查询操作),底层是数组 ...

  4. POI解决内存溢出问题

    在POI3.8中SXSSF仅仅支持excel2007格式是对XSSF的一种流的扩展.目的在生成excel时候,需要生成大量的数据的时候,通过刷新的方式将excel内存信息刷新到硬盘的方式,提供写入数据 ...

  5. 2019-10-21-WPF-多个-StylusPlugIn-的事件触发顺序

    title author date CreateTime categories WPF 多个 StylusPlugIn 的事件触发顺序 lindexi 2019-10-21 08:33:15 +080 ...

  6. SDUT_2502:火星计数法

    火星人的计数规则里只有a,b,c,d四个字母,计数规则从小到大是 a,b,c,d,aa,ab,ac,ad,ba,……. 给出来由a,b,c,d四种字母组成的火星数字,算出该数字是第几个(从1开始). ...

  7. 洛谷 P4114 Qtree1 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 说明 思路 Change Query AC代码 总结 题面 题目链接 P4114 Qt ...

  8. @topcoder - TCO19 Regional Wildcard Wildcard Round - D1L2@ Diophantine

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 令 p[] 为质数序列:p[0] = 2, p[1] = 3, ...

  9. JavaScript原型链中toString()方法输出alert()和console.log()得到不同的结果

    <script language="javascript"> function myObj(){ var total = 0; } myObj.prototype.ad ...

  10. POJ1664 放苹果

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...