Vue.js优雅的实现列表清单

    一、Vue.js简要说明

原文章链接 http://www.cnblogs.com/zjf-1992/p/7834797.html

Vue.js (读音 /vju?/) 是一套构建用户界面的渐进式框架。与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时,会自动更新到ViewModel.反之亦然,View与ViewModel之间通过数据双向绑定(data-binding)建立联系,如下图所示

Vue.js通过MVVM模式将视图与数据分成两部分(或者说视图代码与业务逻辑的解耦),因此我们只需关心数据的操作,DOM的视图的更新等一系列事情,Vue会帮我们自动搞定。

如通过v-model指令实现数据的双向绑定,用户在输入框中输入任意的值,实时显示用户输入message的值(对应上述MVVM模式关系图不难理解)

<!DOCTYPE html>
<html>
<head>
    <title>Vue.js数据的双向绑定</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入 Bootstrap -->
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://unpkg.com/vue"></script>
</head>
<body>
    <div class="container" id="app">
        <input v-model="message" placeholder="请任意输入" class="form-control">
        <p>Message is: {{ message }}</p>
    </div>
    <script type="text/javascript">
        new Vue({  //创建Vue实例
            el:"#app", //挂载创建Vue实例对象
            data: {
                message : "Hello Vue.js"
            },
            methods:{}
        })
    </script>
</body>
</html>

以下楼主直接绕过Vue.js基础语法,对基础语法不了解的可以查阅相关资料,从通过Vue.js优雅实现任务列表操作案例说起,将Vue.js碎片化的知识点模块整合在一块。

接下来一块体验一下Vue.js(读音 /vju?/,类似于 view) 的小清新的/简洁的写法吧.

    二、Vue.js优雅的实现任务列表的操作预览

Vue.js 优雅实现任务列表效果图预览, 在线体验预览效果请点击 Vue edit

    三、HTML骨架CSS样式代码

使用BootStrap前端响应式开发框架,HTML骨架及CSS样式Demo如下

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Vue.js</title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <!-- 引入 Bootstrap -->
 7     <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
 8     <!-- 引入 vue.js -->
 9     <script src="https://unpkg.com/vue"></script>
10     <style type="text/css">
11         .list-group button {
12             background: none;
13             border: 0;
14             color: red;
15             outline: 0;
16             float: right;
17             font-weight: bold;
18             margin-left: 5px;
19         }
20     </style>
21 </head>
22 <body>
23     <div class="container" id="app">
24         <p v-show="remainTask.length>0">任务列表</p>
25         <ul class="list-group">
26               <li class="list-group-item">
27                   <span title="编辑任务">Vue.js - 是一套构建用户界面的渐进式框架</span>
28                   <button title="移除任务">✗</button>
29                   <button title="任务完成">✔</button>
30               </li>
31         </ul>
32         <form>
33             <div class="form-group">
34               <label for="exampleInputEmail1">任务描述</label>
35               <input type="text" class="form-control" placeholder="请输入你要添加的任务" required>
36             </div>
37             <div class="form-group">
38                 <button class="btn btn-primary" type="submit">添加任务</button>
39             </div>
40         </form>
41         <p>已完成的Task</p>
42         <ol class="list-group">
43             <li class="list-group-item">
44                JavaScript高级程序设计
45             </li>
46         </ol>
47     </div>
48 </body>
49 </html>

    四、实例化Vue及应用Vue指令Directives添加项目中

 1     <div class="container" id="app" v-cloak>
 2         <p v-show="remainTask.length>0">任务列表 ({{remainTask.length}})</p>
 3         <ul class="list-group">
 4           <template v-for="task in remainTask">
 5               <li class="list-group-item">
 6                   <span v-on:dblclick="editTask(task)" title="编辑任务">{{task.text}}</span>
 7                   <button v-on:click="removeTask(task)" title="移除任务">✗</button>
 8                   <button v-on:click="completeTask(task)" title="任务完成">✔</button>
 9               </li>
10           </template>
11         </ul>
12         <form>
13             <div class="form-group">
14               <label for="exampleInputEmail1">任务描述</label>
15               <input type="text" class="form-control" placeholder="请输入你要添加的任务" v-model="newTask" required>
16             </div>
17             <div class="form-group">
18                 <button class="btn btn-primary" type="submit" v-on:click="addTask">添加任务</button>
19             </div>
20         </form>
21         <p>已完成的Task({{filterTask.length}})</p>
22         <ol class="list-group">
23             <template v-for="task in filterTask">
24                 <li class="list-group-item">
25                     {{task.text}}
26                 </li>
27             </template>
28         </ol>
29     </div>
30     <script type="text/javascript">
31         var app = new Vue({   //创建Vue对象实例
32             el:"#app", //挂载DOM元素的ID
33             data: {
34                 tasks : [
35                     { text : "Vue.js - 是一套构建用户界面的渐进式框架", complete:false},
36                     { text : "Bootstrap 响应式布局", complete:false },
37                     { text : "Webpack前端资源模块化管理和打包工具", complete:false},
38                     { text : "Yarn 中文手册Yarn 是一个快速、可靠、安全的依赖管理工具", complete:true},
39                     { text : "JavaScript语言精粹", complete:false},
40                     { text : "JavaScript高级程序设计", complete:true}
41                 ],
42                 newTask:"程序员的修炼之道" //默认值
43             },
44             methods:{
45                 addTask:function(event){  //添加任务
46                     event.preventDefault();
47                     this.tasks.push({
48                         text: this.newTask,
49                         complete: false
50                     });
51                     this.newTask = "";
52                 },
53                 editTask:function(task){ //编辑任务
54                     //移除当前点击task
55                     this.removeTask(task);
56
57                     //更新vue实例中newTask值
58                     this.newTask = task.text;
59                 },
60                 removeTask: function(task){ //删除任务
61                     //指向Vue实例中的tasks
62                     _tasks = this.tasks;
63                     //remove
64                     _tasks.forEach(function(item, index){
65                         if(item.text == task.text){
66                             _tasks.splice(index, 1);
67                         }
68                     })
69                 },
70                 completeTask: function(task){ //任务完成状态
71                     task.complete = true; //设置任务完成的状态
72                 }
73             },
74             //用于计算属性,属性的计算是基于它的依赖缓存(如vue实例中的tasks)
75             //只有当tasks数据变化时,才会重新取值
76             computed:{
77                 remainTask:function(){ //筛选未完成的记录
78                     return this.tasks.filter(function(task){ //filter过滤器
79                         return !task.complete;
80                     })
81                 },
82                 filterTask:function(){  //筛选已完成的记录
83                     return this.tasks.filter(function(task){
84                         return task.complete;
85                     })
86                 }
87             }
88         });
89     </script>
v-cloak 主要解决页面初始化慢,乱码的问题(如显示页面显示Vue取值表达式);
v-show 指令简单的CSS属性的切换,适合频繁的切换 CSS属性从display的切换)
v-if 指令决定页面是否插入,相对v-show切换开销比较大
v-on:dblclick, v-on:click 页面事件的绑定
(如 v-on:dblclick(task) 方法名dblclick() 参数task 是的当前点击的tasks数组中的某一个对象
可以使用语法糖 v-on:click可简化成@click 如
<button v-on:click="removeTask(task)"></button>  等价于 <==>
<button @click="removeTask(task)"></button>
v-for 迭代指令 循环遍历数组 filter 主要用于筛选符合条件的数据/日期格式化等
computed用于计算属性,属性的计算是基于它的依赖缓存(如vue实例中的tasks) 只有当tasks数据变化时,才会重新取值 

通过小项目对Vue基础有一定的认识,后期楼主将陆续更新Vue系列文章,欢迎关注......

时间: 2024-10-03 16:49:14

Vue.js优雅的实现列表清单的相关文章

Vue.js(五)列表渲染 v-for

v-for="item in items "  //  数组更新检测  //  对象更改检测注意事项  //  显示过滤 / 排序结果  //  一段取值范围的 v-for  //   v-for 数组:我们用 v-for 指令根据一组数组的选项列表进行渲染.v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组并且 item 是数组元素迭代的别名. <ul id="example-1"> <li v-for

浅析Vue.js 中的条件渲染指令

1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件. html: <div id="app"> <p v-if="type===1">拌面</p> <p v-else-if="type===2">扁肉</p> <p v-else="type===3">其它</p> </div

Vue.js学习之条件v-if和列表循环v-for详解

本文将继续和大家分享Vue.js的基础知识,主要是介绍Vue.js的条件v-if和列表循环v-for的相关使用,一起来看看吧,希望可以帮助大家更好的学习Vue.js. v-if .v-else.v-show.还可以使用template <div v-if="ok">ok</div> <div v-else>No</div> <div v-show="ok">ok</div> <templa

关于vue.js中列表渲染练习

html: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>列表渲染</title></head><body> <!-- v-for可以将一组数组渲染到列表当中 --> <!-- 以item in items的形式 其中 items是源数据 item是他的别名 --&

Vue.js 实战教程 V2.x(10)列表渲染

10列表渲染 10.1用 v-for 把数组对应为元素 <ul id="example-1"> <li v-for="item in items"> {{ item.message }} </li> </ul> var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ] } })

web前端利用vue.js实现品牌列表的添加,删除与筛选功能

实现效果图: 实现功能:web前端利用vue.js实现品牌列表的添加,删除与筛选功能 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> &l

vue.js 初体验— Chrome 插件开发实录

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见的动画效果都封装起来了,非常实用.但是有时候在开发中,仅仅只是需要某一两个动画效果,把整个CSS文件都引入,这样不是太好. 需求就出现了,能不能有一个工具可以直接预览Animate.css对应的动画效果,并且生成对应的动画代码呢? 作为一个UI开发,平时跟Chrome浏览器打交道最多,于是就整了一个

Vue.js 开发实践:实现精巧的无限加载与分页功能

https://segmentfault.com/a/1190000005351971#articleHeader9 本篇文章是一篇Vue.js的教程,目标在于用一种常见的业务场景--分页/无限加载,帮助读者更好的理解Vue.js中的一些设计思想.与许多Todo List类的入门教程相比,更全面的展示使用Vue.js完成一个需求的思考过程:与一些构建大型应用的高阶教程相比,又更专注于一些零碎细节的实现,方便读者快速掌握.致用. 需求分析 当一个页面中信息量过大时(例如一个新闻列表中有200条新闻

更轻更快的Vue.js 2.0与其他框架对比(转)

更轻更快的Vue.js 2.0 崭露头角的JavaScript框架Vue.js 2.0版本已经发布,在狂热的JavaScript世界里带来了让人耳目一新的变化. Vue创建者尤雨溪称,Vue 2.0 在性能上有显著的提升,同时保持轻量的文件下载: 渲染层基于一个轻量级的Virtual DOM实现进行了重写,该Virtual DOM实现fork自snabbdom.新的渲染层相比v1带来了巨大的性能提升,也让Vue 2.0成为了最快速的框架之一. 根据1.0到2.0迁移指南,“大约90%的API是相