接着 2016 年的总结,我们来看看 2016年 国内最火且没有之一的前端MVVM 框架 VueJs

虽然 到写文章的这个时间点,VueJs已经发布了 2.1.x 了, 但是对于很多 Vuejs 的初学者来讲,我建议还是 从 VueJs 1.x 的最后一个版本开始看。

毕竟如果你掌握了 1.X 那么你在学习 2.X 的时候,可能只需要一天时间,就能掌握,真的 是一天教会你 VueJs 感觉不要太爽噢~

不要问我为什么,还是那句话,你试过就知道。

这次就不过多的废话了,毕竟 深V 说 “你能不能深入点,再深入点...”

-------------------------------------------------------------假装有分割线------------------------------------------------------------------

入门以及如何使用 vueJS(对,没错。就是 入门以及如何使用)

那么我们来思考一个问题, 学习一款框架。什么样的程度才算是入门,以及学习一门框架的方式方法。(每个人可能都不一样,但是我们还是要总结一下)

从一个 陌生的 框架 。比如之前的 JQ 的学习 进程应该是这样的。

在没有构建的基础上,先是引入这个库,然后开始照着文档开始写 最简单的 DEMO =》 尝试着把文档中介绍的大部分的API 都自己写一遍 =》 实际的项目中去应用发现坑 =》 解决遇到的坑 =》最后在提升原理层面

这里我推荐两个 做JQ 源码解析不错的 博客

分别是 艾伦 AaronChokCoco

在通过大量时间去 去做 JQ 的源码解析,一方面能够提升你在 JS 语言 的理解,加深对 JS 语法、闭包、继承 等多方面的提升, 另外一方面也加深了你对 JQ 的理解。所以好处多多

后续,也会出JQ 源码分析的文章(希望站在 巨人的肩膀上可以看的更远)

欢迎访问 vuejs 中文社区 , http://vuejs.com.cn

-------------------------------------------------------------假装有分割线------------------------------------------------------------------

这里讲完了 我们熟悉的 JQ 这个库的 学习曲线。那么我们开始思考一下 Vue 这个框架,应该如何下手呢?

总结一个模式吧,任何一款框架的学习,一定是 一边手写 DEMO 一边 看文档 API =》 加入构建 =》 项目应用 =》 发现坑 =》 查找 issues 解决坑

当然 这些环节中 发现坑 和 解决坑 的过程一定是艰难的。 渡过了这个时期,剩下的就是手到擒来。 基本框架以内的问题,均能够去解决。

那么下面,我就介绍一些 入门级 API (指令 或者 方法)

1.1 关于 vueJS 系统自带常规指令的用法

1 : v-show

	<div v-show="true">
this is true
</div>

原理: 类似我们在使用 JQ 时候的时候控制 DOM 显示隐藏 的 display:none / block

因为在还没有看 Vue 的源码的前提下,我们可以通过 改变 属性值 来查看 View 层的变化

这里就是 动态的给对应的 Dom 添加了一个 style 的 display 的样式

2 : v-if (v-else)

	<div v-if="true">
this is A ( true )
</div> <div v-else>
this is B ( fasle)
</div>

原理: 类似我们在使用 JQ 时候的时候 动态的 添加/删除 DOM

eg: var Dom = $(" <div title='香蕉'>香蕉</div >")  body.append(Dom)  /  Dom .remove()

熟悉 JQ 的同学应该 很容易就可以查看到 其中的原理了。是不是很简单

3 : v-for

	<div>
<ul>
<li v-for='item in items'>
{{item.name}}
<span>{{item.age}}</span>
</li>
</ul>
</div>
	new Vue({
el: 'body',
data: {
items: [
{name: 'zhangsan', age: 21},
{name: 'lisi', age: 22},
{name: 'wangwu', age: 23},
{name: 'zhaoliu', age: 24}
]
}
})
注一: *** v-for 的 render 效果如下***
	<div>
<ul>
<li> zhangsan <span>21</span> </li>
<li> lisi <span>22</span> </li>
<li> wangwu <span>23</span> </li>
<li> zhaoliu <span>24</span> </li>
</ul>
</div>

这个 v-for 如果没有接触过 上篇文章中提到过的 TP 这类MVC 框架开发的同学,可能稍微难以理解一点。

那这里我们还是拿 JQ 的例子来说吧

在 JQ 开发中,我们常常会用 字符串 拼接的方式来 解决 ajax 返回数据的 显示。 如果ajax返回一个数组的话,

我们就会在返回的时候 用 for 循环 来 生成我们最后想要是 字符串 然后 再 append 到对应的 节点位置。

但是在 vue 中就不存在 字符串拼接,那样看着 辣眼睛的代码 啦 是不是 很清爽的感觉啊

4 : v-bind

	<div>
<span v-bind='isA'></span>
</div>
	new Vue({
el: 'body',
data: {
isA: 'this is dataA'
}
})
注一: ***v-bind 的 render 效果如下***
	<div>
<span>this is dataA</span>
</div>

注二: v-bind 同样也可以直接 用 胡子标签替换

	<div>
<span> {{isA}} </span>
</div>

这里我们同样用JQ 的例子 来解释 为什么会是这样子的

在JQ 中如果,我们需要动态的去展示一个 属性值的话, 我们首先 需要 获取节点 $ =》 然后再生成 拼接之后的字符串 =》 然后再 append 到对应的节点位置 =》 属性值发生改变 =》我们又需要改变一下 我们拼接是字符串 =》 再 append 到对应的节点位置

但是在 Vue 中 就会简单很多。如上图。 当 data 对象中属性值发生改变,vue 实例化过程会给其属性均添加 getter setter 方法去监听其值的改变,最后反应在视图上。根本不需要我们手动去改任何东西

5 : v-bind: class

	<div v-bind:class="{'active': isActive}">
<span> {{isA}} </span>
</div>
	// 这里是css文件
.active{
color: red;
}
	new Vue({
el: 'body',
data: {
isA: 'this is dataA',
isActive: true
}
})
注一: ***v-bind:class 的 render 效果如下***
	<div class="active">
<span> this is dataA </span>
</div>

注二: ***v-bind:class 同样也可以直接 用 : class 简写 ***

	<div :class="{'active': isActive}">
<span> {{isA}} </span>
</div>

这里是 动态的给节点 添加 / 删除 Class 样式。 在JQ 中我们通常是 先获取节点 $ =》 再 $.addClass('xxx'); => 删除的话 $.removeClass('xxx')

啊,长时间的写 Vue 再让我去写JQ 好难受啊啊啊啊啊

6 : v-bind:style

>  注一: ***v-bind:style 的用法同 v-class  类似***
	<div v-bind:style="{ color: isColorA, fontSize: fontSize + 'px'}">
<span> this is dataA </span>
</div>
	new Vue({
el: 'body',
data: {
isA: 'this is dataA',
isActive: true,
isColorA: blue,
fontSize: 20
}
})
注二: ***v-bind:style 的 render 效果如下***
	<div style="color: blue; font-size: 20px;">
<span> this is dataA </span>
</div>

注三: ***v-bind:style 可以 简写如下 ***

	<div :style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
</div>

这里是 动态的给节点 添加 / 删除 Class 或 style 样式。 在JQ 中我们通常是 先获取节点 $ =》 添加样式的话 $.css('height': "20px") => 删除样式 $.removeAttr("style")

难受。

7 : v-bind : href

>  注一: ***v-bind : href 的用法同 v-class  类似***
	<div v-bind:style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
<a v-bind:href="hrefUrl"> this is a link </a>
</div>
	new Vue({
el: 'body',
data: {
isA: 'this is dataA',
isActive: true,
isColorA: blue,
fontSize: 20,
hrefUrl: 'http://h5.runjiaoyu.com.cn'
}
})
 注二: ***v-bind : href 的 render 效果如下***
	<div style="color: blue; font-size: 20px;">
<span> this is dataA </span>
<a href='http://h5.runjiaoyu.com.cn'></a>
</div>
注三: ***v-bind : href 可以 简写如下 ***
	<div :style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
</div>
注四: ***v-bind : href  同样也可以可以 简写如下 ***
	<div :style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
<a href={{hrefUrl}}> this is a link </a>
</div>

同样 当我们同JQ 去改变某个 a 标签的 href 的值的时候, 首先获取a标签节点 $ =》 改变它的值 $.attr('href', 'www.xxx.com');

继续难受。

8 : v-click

	<div v-bind:style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
<a href={{hrefUrl}}> this is a link </a>
<button v-click='toDo($index)'> click Me </button>
<button v-click='nextToDo($event)'> click Me </button>
</div>
	new Vue({
el: 'body',
data: {
isA: 'this is dataA',
isActive: true,
isColorA: blue,
fontSize: 20,
hrefUrl: 'http://h5.runjiaoyu.com.cn'
},
methods: {
toDo: function() {
// to do something
},
nextToDo: function(e) {
console.log(e.target)
// to do something else
}
}
})
注一: ***v-click   可以 简写如下 ***
	<div :style="{{ color: isColorA, fontSize: fontSize + 'px'}}">
<span> this is dataA </span>
<button @click='toDo'> click Me </button>
<button @click='nextToDo'> click Me </button>
</div>

在 JQ 中我们 去给 节点绑定方法,首先肯定是获取节点 $ =》 然后 $.addEventsListener('click', func) / $.on('click', func)。 这类闭包写多了,代码异常难看,讲真。

不信你看看上面的 Vue 的代码。

1.1.2 关于 vueJS 、 avalon 、 Knockout 等 MVVM 标签渲染 原理解读

	var greeting = 'my name is $(name),age $(age)';
var result = greeting.render({name:'XiaoMing',age:11});
console.log(result); // my name is XiaoMing,age 11

我们给出一个 render 的方法 实现以上需求

代码如下:

String.prototype.render = function (obj) {
var str = this, reg; Object.keys(obj).forEach(function (v) {
reg = new RegExp('\\$\\('+ v +'\\)', 'g');
str = str.replace(reg, obj[v]);
}); return str;
} var greeting = 'my name is $(name),age $(age)';
var result = greeting.render({name:'XiaoMing',age:11});
console.log(result); // my name is XiaoMing,age 11

最后再提一点 体积。 JQ 现在 是 100K 左右, Vue 最小 30K 左右。

Vue 看起来就像是一个灵活的 小猴子呀。

此章节到此结束 文档已 归置 github

可能这个时候又有同学要问了,卧槽,不是说好了要介绍 Vue 的入门么?

为什么你的入门里面,基本上都是讲的 用法什么的,对于我这个一无所知的 我来说很难理解啊。

记住Vue 作者 尤雨溪 曾经说过的一句话,如果 学习Vue 通过看文档都不能学会,那就是 Vue 的错。

最新文章

  1. 【Swift 2.1】为 UIView 添加点击事件和点击效果
  2. /etc/bashrc和/etc/profile傻傻分不清楚?
  3. 【BZOJ1011】【HNOI2008】遥远的行星(乱搞)
  4. java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
  5. springmvc+ajaxFileUpload上传文件(前后台彻底分离的情况下)
  6. homework-03 图形化化最大子序列和
  7. CentOS5.5上安装git
  8. iOS: 学习笔记, 透过Boolean看Swift(译自: https://developer.apple.com/swift/blog/ Aug 5, 2014 Boolean)
  9. Cows - POJ 3348(凸包求面积)
  10. find your present (2) 2095
  11. jQuery Colorbox是一款弹出层
  12. Git GitHub的使用
  13. socket聊天室(服务端)(多线程)(TCP)
  14. 报错:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop&#39;s value. Prop bei
  15. 简单学完HTML+CSS+JS,现在开始看算法(第四版)----欧几里得算法
  16. springboot整合dubbo\zookeeper做注册中心
  17. 空串、null串和isEmpty方法
  18. MYSQL-8.0.11-WINX64(免安装版)配置
  19. js基础-语句
  20. 小米范工具系列之六:小米范 web查找器2.x版本发布

热门文章

  1. jmeter主要函数助手功用说明
  2. MVC简单的增删改查
  3. linux服务器用ssh 公钥下载代码 创建公钥,添加
  4. docker 清理容器的一些命令,彻底或选择清理
  5. php操作数组函数
  6. python学习:输入设置
  7. 守护模式,互斥锁,IPC通讯,生产者消费者模型
  8. 快速实现office文档在线预览展示(doc,docx,xls,xlsx,ppt,pptx)
  9. 麒麟子Cocos Creator实用技巧
  10. 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨