Vue.js优雅的实现列表清单的操作
一、Vue.js简要说明
Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架。与前端框架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:function(){ } }) </script> </body> </html>
以下楼主直接绕过Vue.js基础语法,对基础语法不了解的可以查阅相关资料,从通过Vue.js优雅实现任务列表操作案例说起,将Vue.js碎片化的知识点模块整合在一块。
接下来一块体验一下Vue.js(读音 /vjuː/,类似于 view) 的小清新的/简洁的写法吧.
二、Vue.js优雅的实现任务列表的操作
Vue.js 优雅实现任务列表效果图预览
三、HTML骨架CSS样式代码
使用BootStrap前端响应式开发框架,HTML骨架及CSS样式Demo如下
<!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"> <!-- 引入 vue.js --> <script src="https://unpkg.com/vue"></script> <style type="text/css"> .list-group button { background: none; border: ; color: red; outline: ; float: right; font-weight: bold; margin-left: 5px; } </style> </head> <body> <div class="container" id="app"> <p v-show="remainTask.length>0">任务列表</p> <ul class="list-group"> <li class="list-group-item"> <span title="编辑任务">Vue.js - 是一套构建用户界面的渐进式框架</span> <button title=;</button> <button title=;</button> </li> </ul> <form> <div class="form-group"> <label for="exampleInputEmail1">任务描述</label> <input type="text" class="form-control" placeholder="请输入你要添加的任务" required> </div> <div class="form-group"> <button class="btn btn-primary" type="submit">添加任务</button> </div> </form> <p>已完成的Task</p> <ol class="list-group"> <li class="list-group-item"> JavaScript高级程序设计 </li> </ol> </div> </body> </html>
四、实例化Vue及应用Vue指令Directives添加项目中
<div class="container" id="app" v-cloak> <p v-show="remainTask.length>0">任务列表 ({{remainTask.length}})</p> <ul class="list-group"> <template v-for="task in remainTask"> <li class="list-group-item"> <span v-on:dblclick="editTask(task)" title="编辑任务">{{task.text}}</span> <button v-on:click=;</button> <button v-on:click=;</button> </li> </template> </ul> <form> <div class="form-group"> <label for="exampleInputEmail1">任务描述</label> <input type="text" class="form-control" placeholder="请输入你要添加的任务" v-model="newTask" required> </div> <div class="form-group"> <button class="btn btn-primary" type="submit" v-on:click="addTask">添加任务</button> </div> </form> <p>已完成的Task({{filterTask.length}})</p> <ol class="list-group"> <template v-for="task in filterTask"> <li class="list-group-item"> {{task.text}} </li> </template> </ol> </div> <script type="text/javascript"> var app = new Vue({ //创建Vue对象实例 el:"#app", //挂载DOM元素的ID data: { tasks : [ { text : "Vue.js - 是一套构建用户界面的渐进式框架", complete:false}, { text : "Bootstrap 响应式布局", complete:false }, { text : "Webpack前端资源模块化管理和打包工具", complete:false}, { text : "Yarn 中文手册Yarn 是一个快速、可靠、安全的依赖管理工具", complete:true}, { text : "JavaScript语言精粹", complete:false}, { text : "JavaScript高级程序设计", complete:true} ], newTask:"程序员的修炼之道" //默认值 }, methods:{ addTask:function(event){ //添加任务 event.preventDefault(); this.tasks.push({ text: this.newTask, complete: false }); this.newTask = ""; }, editTask:function(task){ //编辑任务 //移除当前点击task this.removeTask(task); //更新vue实例中newTask值 this.newTask = task.text; }, removeTask: function(task){ //删除任务 //指向Vue实例中的tasks _tasks = this.tasks; //remove _tasks.forEach(function(item, index){ if(item.text == task.text){ _tasks.splice(index, ); } }) }, completeTask: function(task){ //任务完成状态 task.complete = true; //设置任务完成的状态 } }, //用于计算属性,属性的计算是基于它的依赖缓存(如vue实例中的tasks) //只有当tasks数据变化时,才会重新取值 computed:{ remainTask:function(){ //筛选未完成的记录 return this.tasks.filter(function(task){ //filter过滤器 return !task.complete; }) }, filterTask:function(){ //筛选已完成的记录 return this.tasks.filter(function(task){ return task.complete; }) } } }); </script>
v-cloak 主要解决页面初始化慢,乱码的问题(如显示页面显示Vue取值表达式); v-show 指令简单的CSS属性的切换,适合频繁的切换 (如v-show="remainTask.length>0"从不满住条件(remainTask.length==0)至符合条件 (remainTask.length>0) CSS属性从display:none到display:block切换) v-if 指令决定页面是否插入,相对v-show切换开销比较大 v-on:dblclick, v-on:click 页面事件的绑定 (如 v-on:dblclick(task) 方法名dblclick() 参数task 是tasks数组对象中的某一个事件触发的对象) v-for 迭代指令 循环遍历数组 filter 主要用于筛选符合条件的数据/日期格式化等 computed用于计算属性,属性的计算是基于它的依赖缓存(如vue实例中的tasks) 只有当tasks数据变化时,才会重新取值
Vue.js优雅的实现列表清单的操作的更多相关文章
- Vue.js优雅的实现列表清单
一.Vue.js简要说明 Vue.js (读音 /vjuː/) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时 ...
- vue.js循环for(列表渲染)详解
vue.js循环for(列表渲染)详解 一.总结 一句话总结: v-for <ul id="example-1"> <li v-for="item in ...
- Vue.js—快速入门
Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...
- Vue.js—快速入门及实现用户信息的增删
Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...
- 浅析Vue.js 中的条件渲染指令
1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件. html: <div id="app"> < ...
- 使用eclipse初步学习vue.js的基本操作 ①
一.vue.js的初步认识 <a href="https://unpkg.com/vue ">vue.js下载</a> 1.抛开手动操作DOM的思维,Vue ...
- Vue.js——理解与创建使用
Vue.js 概念:是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API,作者是尤雨溪是中国人. 优点: 1)易用 已经会了HTML,CSS,JavaScript?即刻阅读指南开始构 ...
- vue.js的特点-1
1. Vue.js是数据驱动的,无需手动操作DOM. 它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应的更新. 2. MV ...
- 优雅的vue.js
优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...
随机推荐
- Python一维数据分析
1.Numpy数组 numpy的数组只能存放同一种数据类型,使用的方式和Python列表类似 1.1 声明: import numpy as np countries = np.array([ 'Af ...
- ASP.NET没有魔法——目录
ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序 ASP.NET没有魔法——为什么使用ASP.NET ASP.NET没有魔法——第一个ASP.NET应用<MyBlog&g ...
- Nginx 1.10.1 版本nginx.conf优化配置及详细注释
Nginx 1.10.1 的nginx.conf文件,是调优后的,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置 #运行用户 user ...
- zabbix灵活使用userparameters
userparameters介绍 官网文献:https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters 当我 ...
- 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分 ...
- firewalld 操作实践
1.firewalld 从名称上看,模仿的是硬件防火墙的概念,zone. 所有的接口都必须属于某个zone . 在zone内配置规则. 2. 常用的方法是 增加对一个tcp或者udp端口号的允许通过 ...
- Jmeter脚本录制方法(二)——手工编写脚本(jmeter与fiddler结合使用)
jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷. 首先来看下三种方式 ...
- dotweb框架之旅 [三] - 常用对象-HttpServer
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿. dotweb包含以下几个常用对象: App(dotweb) App容器,为Web ...
- iOS多线程基本使用
大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...
- UITextView实现限制100字
placeHoderLable = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, DeviceWidth-6, 40)]; //根据情况调节位置 pla ...