一、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数据变化时,才会重新取值

作者:Avenstar

出处:http://www.cnblogs.com/zjf-1992/p/7821352.html

关于作者:专注于前端开发

本文版权归作者所有,转载请标明原文链接

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

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

        一.Vue.js简要说明 Vue.js (读音 /vjuː/) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时 ...

  2. vue.js循环for(列表渲染)详解

    vue.js循环for(列表渲染)详解 一.总结 一句话总结: v-for <ul id="example-1"> <li v-for="item in ...

  3. Vue.js—快速入门

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

  4. Vue.js—快速入门及实现用户信息的增删

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

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

    1 应用于单个元素 Vue.js 中的条件渲染指令可以根据表达式的值,来决定在 DOM 中是渲染还是销毁元素或组件. html: <div id="app"> < ...

  6. 使用eclipse初步学习vue.js的基本操作 ①

    一.vue.js的初步认识 <a href="https://unpkg.com/vue ">vue.js下载</a> 1.抛开手动操作DOM的思维,Vue ...

  7. Vue.js——理解与创建使用

    Vue.js 概念:是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API,作者是尤雨溪是中国人. 优点: 1)易用 已经会了HTML,CSS,JavaScript?即刻阅读指南开始构 ...

  8. vue.js的特点-1

    1. Vue.js是数据驱动的,无需手动操作DOM. 它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应的更新. 2. MV ...

  9. 优雅的vue.js

    优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...

随机推荐

  1. C#实现断点续传

    断点续传的原理在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求时 ...

  2. js基于谷歌地图API绘制可编辑圆形与多边形

    之前的工作中需要在谷歌地图上绘制可编辑多边形区域,所以基于谷歌地图API封装了个html页面,通过调用js绘制多边形并返回各点的经纬度坐标:当然首先你要保证你的电脑可以打开谷歌地图... 新建一个ht ...

  3. 程序员 各种PDF格式电子书--免费网盘资源

    Java <设计模式之禅(完整高清版)> 链接:http://pan.baidu.com/s/1bo7noMb 密码:5kve  <重构_改善既有代码的设计> 链接:http: ...

  4. zoj3953 Intervals 最大不重叠区间加强版 zoj排名第一~

    Intervals Time Limit: 1 Second      Memory Limit:65536 KB      Special Judge Chiaki has n intervals ...

  5. FirstIDL

    pro FIRSTIDL ;控制台输出 print,'first IDL' ;控制台输出 void=dialog_message('Hello,IDL world!',/information) en ...

  6. flex的三个属性:

    (1)flex-grow:指的是相对于其他的子元素的扩展比率:默认值为0:数字 (2)flex-basis:指的是子元素的具体长度:可以为长度(rem,px,em)也可以为百分比: (3)flex-s ...

  7. zabbix使用mysql数据库 对表分区

    zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...

  8. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...

  9. 【框架学习与探究之AOP--Castle DynamicProxy】

    声明 本文欢迎转载,原始地址:http://www.cnblogs.com/DjlNet/p/7603654.html 前言 先说一点废话,在此之前博主也在早期就接触了或者看了些许AOP相关的文章,然 ...

  10. VIM文本替换命令

    在VIM中进行文本替换:       1.  替换当前行中的内容:    :s/from/to/    (s即substitude)         :s/from/to/     :  将当前行中的 ...