Vue和一些7788
最近公司的朋友都很疑惑,前端这阵子真的是日新月异,我们还用着jquery,underscore和knockout这些“小玩具”好像步入了中年一样。没办法啊,现在的前端大兴土木搞组件,搞模块化,我们也得跟,不过老项目总有钉子户,不能一口啃下来,所以就出了一个兼容并包的demo。
简单的模板
初始化这些到处可以搜到的东西就不重复写了。
直接上手写组件。
1 2 3 4 5 6 7 8 9
| Vue.component('section1',{ template:'<section><h2>{{title}}</h2><div>{{message}}</div></section>', data:function(){ return { title:'示例1:独立组件', message:'data必须是function' } } });
|
循环模板
1 2 3 4 5 6 7 8
| <ul class="card_frame"> <li is="card-item" v-for="(card, index) in cards" v-bind:title="card.text" > </li> </ul>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Vue.component('card-item',{ template:'<li>{{title}}</li>', props:['title'] }); var app = new Vue({ el: '#app', data: { title:"Vue Demo", message:"Vue常用功能示例", cards:[ {text:'card1'}, {text:'card2'}, {text:'card3'} ], ...
|
事件绑定模板
1 2 3 4 5 6 7 8
| <ul class="card_frame"> <li is="card-item2" v-for="(card, index) in cards" v-bind:title="card.text" ></li> </ul>
|
1 2 3 4 5 6 7 8 9
| Vue.component('card-item2',{ template:'<li v-on:click="hideText($event)">{{title}}</li>', props:['title'], methods:{ hideText:function(e){ e.target.style.display = "none"; } } });
|
引用外部插件
1
| <script src="js/jquery.dragsort-0.5.1.js"></script>
|
1 2 3 4 5 6 7 8
| mounted:function(){ console.log("组件挂载后,目标li的数量为:"+$("#list1 li").length); $("#list1, #list2").dragsort({ dragSelector: "li", dragBetween: true, dragEnd: saveOrder }); function saveOrder() { console.log("调用拖动事件后,目标li的数量为:"+$("#list1 li").length); }; }
|
Ajax请求
1
| <section5 v-bind:weather="ajaxData"></section5>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Vue.component('section5',{ template:'<section><h2>{{title}}</h2><div>{{message}}</div><div>当前天气:{{weather}}</div></section>', data:function(){ return { title:'示例5:AJAX获取数据', message:'异步数据的展示' } }, props:['weather'] }); ... created:function(){ console.log("实例创建后,ajaxData为:"+this.ajaxData); var self = this; $.ajax({ url: "http://api.k780.com:88/?app=weather.today&weaid=1&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&jsoncallback=?", dataType: "jsonp", type:"Post", jsonpCallback: "jsonpCallback", success: function (data) { self.ajaxData = data.result.temperature; console.log("请求完成后,ajaxData为:"+self.ajaxData); } }); console.log("实例创建后,目标li的数量为:"+$("#list1 li").length); }, ...
|
后话
想当初,我刚做前端的时候,全世界都在说内容表现行为要分离。现在的webapp,大框架,模块化,恨不得JS搞定一切,想来也是唏嘘,不过每个时代总有局限性,只要能适应以后的发展就跟着走吧。
完整demo见boom。