Vue.js入门
之前一直用的是jQuery,jQuery手动操作DOM导致性能不够好,因为DOM修改导致的页面重绘、重新排版!重新排版是用户阻塞的操作,同时,如果频繁重排,CPU使用率也会猛涨!
Vue.js是数据驱动的,它通过一些特殊的HTML语法,将DOM和数据绑定起来。一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。
一个简单的例子:
一个页面需要通过异步请求获取数据然后展示在页面上,用jQuery方法处理是:
$(function(){
var $jsontip = $(".car_wrap");
var strHtml = "";//存储数据的变量
$jsontip.empty();//清空内容
$.each(carlist,function(infoIndex,info){
if((infoIndex+1)%3 == 0) {
strHtml += "<div class='car_item margin_no'>";
} else {
strHtml += "<div class='car_item'>";
}
strHtml += "<a class='img_con' href='detail.html?id="+info["id"]+"'><img class='car_img' src='"+info["carpic"]+"'></a>";
strHtml += "<div class='car_info'>";
strHtml += "<a href='detail.html?id="+info["id"]+"'><div class='car_size'> 型号:"+info["carsize"]+"</div></a>";
strHtml += "<a href='detail.html?id="+info["id"]+"'><div class='car_des'> 座位数(人):"+info.setinfo["seating"]+"</div></a>";
strHtml += "<div class='g_car_reserve' data-contacts="+JSON.stringify(info.contacts)+">立即预定</div>";
strHtml += "</div>";
strHtml += "</div>";
});
$jsontip.html(strHtml);//显示处理后的数据
});
这样需要动态拼成DOM节点,或者用模版。
看下Vue.js的处理方法:
<script>
//相当于Model
var carlist = [
{
"url":"/1",
"carpic":"",
"carsize":"da",
},
{
"url":"/2",
"carpic":"",
"carsize":"small",
},
];
//创建一个Vue实例(ViewModel)
var app = new Vue({
el: '#home',
data: {
list: carlist
}
});
</script>
HTML中的代码为:
<!--这是View-->
<div class="home_wrap" id="home">
<div class="big_banner">
</div>
<div class="car_wrap clearfix">
<a v-for="item in list">
<img class="car_img" src="">
<div class="car_info">
<div class="car_size">
汽车型号:{{item.carsize}}
</div>
<div class="car_reserve">立即预定</div>
</div>
</a>
</div>
</div>
是不是方便许多,这里就不再需要拼接DOM,也不会有频繁的DOM操作了。接下来看看为什么Vue.js可以这样做。
Vue.js是一个javascript MVVM(Model-View-ViewModel)库,Vue.js中ViewModel是和View以及Model交互的过程如下:
ViewModel是Vue.js的核心,它是一个Vue实例。Vue实例是作用于某一个HTML元素上的。上述代码中:
var app = new Vue({
el: '#home',
data: {
list: carlist
}
});
这就创建了一个Vue实例(ViewModel),它连接View与Model。HTML中id为home中的代码就是view, Model就是数据模型。上图中,DOM Listeners和Data Bindings看作两个工具,它们是实现双向绑定的关键。从View侧看,ViewModel中的DOM Listeners工具会帮我们监测页面上DOM元素的变化,如果有变化,则更改Model中的数据;从Model侧看,当我们更新Model中的数据时,Data Bindings工具会帮我们更新页面中的DOM元素。
双向绑定示例:
MVVM模式本身实现了双向绑定,在Vue.js中可以使用v-model指令在表单元素上创建双向数据绑定。
<div class="car_des">
<input type="text" v-model="item.carsize" />
</div>
将item.carsize绑定到文本框,当更改文本框的值时,
<div class="car_size">
汽车型号:{{item.carsize}}
</div>
这里用到的item.carsize也会更新
Vue.js的常用指令
1.v-if指令
v-if是条件渲染指令,它根据表达式的真假来删除和插入元素。举例:
<body>
<div id="app">
<h1>Hello, Vue.js!</h1>
<h1 v-if="yes">Yes!</h1>
<h1 v-if="age >= 25">Age: {{ age }}</h1>
<h1 v-if="name.indexOf('jack') >= 0">Name: {{ name }}</h1>
</div>
</body>
<script src="js/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
yes: true,
age: 28,
name: '11'
}
});
</script>
在console中改变其中的值后的效果:
2.v-show指令
v-show
也是条件渲染指令,和v-if指令不同的是,使用v-show
指令的元素始终会被渲染到HTML,它只是简单地为元素设置CSS的style属性。
3.v-else指令
用v-else
指令为v-if
或v-show
添加一个“else块”。v-else
元素必须立即跟在v-if
或v-show
元素的后面——否则它不能被识别
4.v-for指令
v-for
指令基于一个数组渲染一个列表,v-for="item in items"
5.v-bind指令
v-bind
指令可以在其名称后面带一个参数,中间放一个冒号隔开,这个参数通常是HTML元素的特性(attribute),例如:
<a href="javascripit:void(0)" v-bind:class="a === 1 ? 'active' : ''">1</a>
可以缩写为:
<a href="javascripit:void(0)" :class="a === 1 ? 'active' : ''">1</a>
6.v-on指令
v-on
指令用于给监听DOM事件,它的用语法和v-bind是类似的,例如监听<a>元素的点击事件:<a v-on:click="doSomething">
可以缩写为:<a @click="doSomething">
总结
理解了Vue.js的MVVM模型和它的双向绑定机制,自己也需要从之前用jQuery手动操作DOM元素思维转向数据驱动的Vue.js
参考:
Vue.js入门的更多相关文章
- Vue.js 入门教程
Vue.js 入门教程:https://cn.vuejs.org/v2/guide/index.html
- 免费的 Vue.js 入门与进阶视频教程
这是我免费发布的高质量超清「Vue.js 入门与进阶视频教程」. 全网最好的.免费的 Vue.js 视频教程,课程基于 Vue.js 2.0,由浅入深,最后结合实际的项目进行了最棒的技术点讲解,此课程 ...
- Vue.js入门(一)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta htt ...
- Vue.js 入门:从零开始做一个极简 To-Do 应用
Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言 学习 Vue ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- vue.js 入门学习
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- [转]Vue.js 入门教程
本文转自:http://www.runoob.com/w3cnote/vue-js-quickstart.html 什么是 Vue.js? Vue.js 是用于构建交互式的 Web 界面的库. Vu ...
- Vue.js入门系列(一)
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
随机推荐
- 使用Monit监控本地进程
目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...
- SQLServer事务同步下如何收缩日志
事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...
- 关于python的bottle框架跨域请求报错问题的处理
在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- 敏捷转型历程 - Sprint3 一团糟的演示会
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...
- Windows Server 2008 R2 下配置TLS1.2,添加自签名证书
前言 2017年1月1日起App Store上的所有App应用将强制开启ATS功能. 苹果的ATS(App Transport Security)对服务器硬性3点要求: ① ATS要求TLS1.2或者 ...
- Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...
- 腾讯云 安装mono
一.yum -y update 运行出现以下错误: http://centos.tencentyun.com/contrib/x86_64/repodata/filelists.xml.gz: [Er ...