摘要:改变其中的任何一层,另外一层都会改变。插值相信你也注意到了,通过的形式就能取到的值,并与进行绑定。中改变中的值时相应也改变了中的,从而也得到改变。上面的代码改为这样则不会随着数据的改变而更新。顾名思义,用于条件判断,和是一对。
什么是Vue.js
vue是法语中视图的意思,Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7
准备我推荐使用sublime text作为编辑器,关于这个编辑器可以看我这篇文章。在package control中安装
Vuejs Snippets
Vue Syntax Highlight
推荐使用npm管理,新建两个文件app.html,app.js,为了美观使用bootstrap,我们的页面模板看起来是这样:
安装Document Vue demo
.......
使用npm安装:
npm install vue
当然你也可以在github上clone最新的版本并作为单文件引入,或者使用CDN:
http://cdn.jsdelivr.net/vue/1.0.7/vue.min.js http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.7/vue.min.jsHelloWorld
动手写第一个Vue.js 应用吧。
app.html:
{{message}}
app.js:
new Vue({ el:"#app", data: { message:"hello vue.js." } });创建Vue实例
在使用Vue.js之前,我们需要先像这样实例化一个Vue对象:
new Vue({ el:"#app" });双向数据绑定
就像HelloWorld展示的那样,app.html是view层,app.js是model层,通过vue.js(使用v-model这个指令)完成中间的底层逻辑,实现绑定的效果。改变其中的任何一层,另外一层都会改变。
插值相信你也注意到了,通过{{value}}的形式就能取到value的值,并与value进行绑定。HelloWorld中改变input中的值时相应也改变了app.js中的message,从而{{message}}也得到改变。上面的代码改为这样:
{{*message}}
则message不会随着数据的改变而更新。同时还支持一些简单的表达式:
{{message + "vue is awesome"}} {{ message.split("").reverse().join("") }}常用的指令 v-model
v-model可用于一些表单元素,常见的input,checkbox,radio,select:
v-for
Selected: {{ selected | json }}
列表渲染在实际开发中非常常见,vue.js使用v-for这个指令就能完成,v-for取代了1.0以前版本中的v-repeat。在app.js中准备一些数据:
new Vue({ el: "#app", data: { book: { id: 0, author: "", name: "", price: "" }, books: [{ id: 1, author: "曹雪芹", name: "红楼梦", price: 32.0 }, { id: 2, author: "施耐庵", name: "水浒传", price: 30.0 }, { id: "3", author: "罗贯中", name: "三国演义", price: 24.0 }, { id: 4, author: "吴承恩", name: "西游记", price: 20.0 }] } })
在data里我们设置了两个数据book和book[] books,在app.html中我们只要这样就能获取到数据了:
{{book.id}} {{book.name}} {{book.author}} {{book.price}}
如果你比较细心的话,在数据还未加载完时是会有闪烁的情况出现,解决方法也很简单,使用v-cloak,然后定义css:
[v-cloak] { display: none }v-on
vue.js通过v-on完成事件处理与绑定,比如为一个button绑定click事件,我们就可以这么写:
也可以缩写:
我们需要为v-on传入事件参数,然后在vue的实例中声明doSomething这个方法就可以调用了:
new Vue({ el: "#app", methods: { doSomething: function () { /...../ } } })
接着上面书的例子,我们用v-model绑定form:
在app.js中增加我们的addBook方法:
methods: { addBook: function() { //计算书的id this.book.id = this.books.length + 1; this.books.push(this.book); //将input中的数据重置 this.book = ""; } }
我们再健全一下功能,增加一个删除按钮:
delBook方法:
delBook:function(book){ this.books.$remove(book); }
vue.js为数组扩展了$remove方法,查找并删除我们作为参数传递过去的book。
v-if/v-else/v-show顾名思义,v-if用于条件判断,和v-else是一对。用法也很简单,下面的代码是将id为偶数的操作按钮换个样式:
...... ..... .........
这里用到了标签,用于包含多个元素,当元素只有一个时,直接在元素上用v-if即可:
Yes
No
v-show作用与v-if类似,不同的是v-show的元素会始终渲染并保持在 DOM 中,且v-show不支持标签。
过滤器与Linux中的管道类似,vue.js也使用的是|:
{{message | uppercase}}
这样就能输出message的大写了,过滤器也能串联在一起使用:
{{message | reverse | uppercase}}
这里reverse并不是内建的过滤器,我们可以用Vue.filter自定义:
Vue.filter("reverse", function (value) { return value.split("").reverse().join("") })
过滤器支持接收参数,比较常用的是orderBy [param]和filterBy [param],现在我们为表格增加自定义排序的功能,为表头绑定click事件:
序号 书名 作者 价格
想sortBy传递列的参数,定义sortBy和data:
data: { sortparam: "" }, methods:{ sortBy: function(sortparam) { this.sortparam = sortparam; } }
添加过滤器:
计算属性 计算属性可以帮助我们完成一些复杂的逻辑计算,比如我们需要添加一个书的总价,在vue实例中添加computed:
new Vue({ /.../ computed: { sum: function() { var result = 0; for (var i = 0; i < this.books.length; i++) { result = Number(this.books[i].price) + result; }; return result; } }, /.../ })在app.html中使用插值表达式:
{{sum}}vue-resourcevue-resource作为vue插件的形式存在,通过 XMLHttpRequest 或 JSONP 发起请求并处理响应。在开发中也非常常见,现在我们用vue-resource来请求books:
引入和vue类似:
npm install vue-resource --save 如果你的项目遵循CommonJS: var Vue = require("vue"); Vue.use(require("vue-resource"));也可以直接引入单文件或者CDN。
get在vue中新增ready对象,当页面加载完成时就去请求:
new Vue({ el: "#app", ready: function() { this.$http.get("book.json", function(data) { this.$set("books", data); }).error(function(data, status, request) { console.log("fail" + status + "," + request); }) }, data: { .... books:"" }, .....为了演示,这里将json格式的数据保存在book.json中,这段数据你可以直接使用JSON.stringify()得到:
[{"id":1,"author":"曹雪芹","name":"红楼梦","price":32},{"id":2,"author":"施耐庵","name":"水浒传","price":30},{"id":"3","author":"罗贯中","name":"三国演义","price":24},{"id":4,"author":"吴承恩","name":"西游记","price":20}]接下来你需要将app.html中运行在一个服务器中,否则由于浏览器安全的限制,是无法直接读取的,如果你嫌麻烦可以用这个参数启动chrome。
.chrome.exe --allow-file-access-from-files如果你使用了npm,想要启动一个服务器就太简单了:
npm install http-server -g //在当前目录 http-server //然后访问localhost:8080/app.htmlpostpost的语法也很简单:
this.$http.post(url,postdata,function callback)在使用的时候遇到一个小坑,这个$http请求和jquery的ajax还是有点区别,这里的post的data默认不是以form data的形式,而是request payload。解决起来也很简单:
在vue实例中添加headers字段:http: { headers: {"Content-Type": "application/x-www-form-urlencoded"} }后来翻了下vue-resource的源码,发现有更加简单的做法:
Vue.http.options.emulateJSON = true;这里只简单介绍下,详细的文档请大家移步这里吧。
vue.js目前还有众多的插件,详情看这里。
总结这里简单介绍了下vue.js的基本用法,但只仅仅介绍了一小部分作为库使用的内容,想了解更多vue.js的内容,还是多多关注vue.js的github主页,所用的例子我也分享了,可以在这里查看并运行结果。
更多http://vuejs.org/
https://github.com/vuejs/
http://vegibit.com/vue-js-tutorial/
http://www.zhihu.com/people/evanyou
http://www.html-js.com/article/column/99
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86154.html
相关文章
vue.js快速入门
摘要:但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门。不知道还要不要再来一个快速入门,发展得挺快,东西也像类似的全家。 以前看到多少天学习系列,我都深感烦躁,短短几天怎么可以精通,那是对于他们而言。但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门。 回到vue本身...
前端必须要珍藏的技术文章和面试题
摘要:前端工程师学习资料,快速查找面试题,经典技术文章的总结,编程技巧,帮助学习者快速定位问题花点时间整理出一下前端工程师日常工作所需要的学习资料查找,帮助学习者快速掌握前端工程师开发的基本知识编程始于足下记住再牛逼的梦想也抵不住傻逼似的坚持蝴蝶 前端工程师学习资料,快速查找面试题,经典技术文章的总结,编程技巧,帮助学习者快速定位问题花点时间整理出一下web前端工程师日常工作所需要的学习资料...
Vue.js快速入门
摘要:今年以来,的文档更新很快完善社区也日渐状大,再加上于某厂你懂的大力的推广,的前景十分光明。一般情况下,中小型的系统从迁移到版本大概只需要天的时间。快去动手尝试吧原创新书移动前端高效开发实战已在亚马逊京东当当开售。 作者:晓飞(沪江Web前端开发工程师)本文原创,转载请注明作者及出处 Vue.js框架已经火了好长一段时间了,早在2015年的双11中,淘宝的部分导购业务——如:双十一晚会摇...
vue.js快速入门
摘要:的核心库只关注视图层,并且非常容易学习,同时拥有非常容易上手的中英文都有提供快速入门准备地址地址没错就只需要这两个就可以开发了是核心文件,在这里只是为了提高开发效率而引用的,是可选的。专门存储一些数据的属性,数据一定是对象格式。 **关于前阵子的文章错误有点多所以从新修改了并添加了一些在官方脚手架vue-cli开发时需要注意的事项,Vue.js是一个轻巧、高性能、可组件化的MVVM库。...
发表评论
0条评论
caspar
男|高级讲师
TA的文章
阅读更多
第五章-Java修饰符#yyds干货盘点#
阅读 3620·2021-11-23 09:51
RAKsmart(RAK Cloud):首购云服务器低至3折,云服务器产品全场8折优惠,香港云$9.
阅读 1639·2021-10-22 09:53
cubecloud,国庆限时促销,全场VPS 88,可选中国香港CN2 GIA/美国CN2 GIA/
阅读 1328·2021-10-09 09:56
深入css之去除inline-block元素之间的多余间隙
阅读 839·2019-08-30 13:47
APICloud Github 5大开源项目集合展示
阅读 2132·2019-08-30 12:55
CSS技巧记录
阅读 1580·2019-08-30 12:46
display: flex;’布局下使用‘white-space: nowrap;’导致的问题
阅读 1085·2019-08-30 10:51
初探响应式布局 - 以小项目为例
阅读 2391·2019-08-29 12:43
阅读需要支付1元查看