VUEJS实战之修复错误并且美化时间(2)


Posted in Javascript onJune 13, 2016

前言

在上一章中,我们通过基础的搭建,成功的渲染了列表页面.但是,其中的问题是很多的.这一章,我们来解决这些问题.

使用 v-bind 绑定数据.

上一章的代码,我们渲染出来了页面.但是如果打开了控制台,你会发现有错误.如下图所示:

VUEJS实战之修复错误并且美化时间(2)

这是因为页面进来的时候,会先执行我们的html代码,而此时,我们的vue还没开始工作.而我们的代码如下:

<li v-for="info in data">
 <i class="user_ico">
 <img src="{{ info.author.avatar_url }}" alt="{{ info.author.loginname }}">
 <span>{{ info.author.loginname }}</span>
 </i>
 <time class="time">{{ info.create_at }}</time>
 <a class="talk" href="content.html?{{ info.id }}">{{ info.title }}</a>
</li>

如上,页面去解析 src="{{ info.author.avatar_url }}"的时候,当然是找不到这个图片路径的.因此,自然而然会出错.因此,我们需要来处理一下这个代码.我们修改为

<img v-bind:src="info.author.avatar_url" v-bind:alt="info.author.loginname">

好,我们刷新一下页面,这一次,就没有报错了.

VUE知识点

v-bind 绑定属性 http://vuejs.org.cn/api/#v-bind

补充:

其实,我们打开页面的时候,还是可以在一瞬间看到这些 {{ ... }} 的内容.虽然这个不会报错,但是还是影响了一点点用户体验.这个时候,我们可以用 v-text 来输出这些内容,如上,我们把代码修改为如下:

<li v-for="info in data">
 <i class="user_ico">
 <img v-bind:src="info.author.avatar_url" v-bind:alt="info.author.loginname">
 <span v-text="info.author.loginname"></span>
 </i>
 <time class="time" v-text="info.create_at"></time>
 <a class="talk" href="content.html?{{ info.id }}" v-text="info.title"></a>
</li>

当我们把代码修改成这样之后,所有的问题就都解决了.

VUE知识点

v-text 输出文本 http://vuejs.org.cn/api/#v-text

美化时间

我们从接口获取的时间格式是这样的2016-06-12T06:17:35.453Z,很显然,这不是我们想要的效果.我们想要的效果应该是这样的 发表于2小时之前 这样的效果.怎么做呢?

我们需要一个函数,这个函数的作用是给他一段原始的字符串,然后返回一个我们想要的字符串.

关于这个函数的原理,不是我们的重点,这里不解释,直接看代码如下:

function goodTime(str){
 var now = new Date().getTime(),
 oldTime = new Date(str).getTime(),
 difference = now - oldTime,
 result='',
 minute = 1000 * 60,
 hour = minute * 60,
 day = hour * 24,
 halfamonth = day * 15,
 month = day * 30,
 year = month * 12,

 _year = difference/year,
 _month =difference/month,
 _week =difference/(7*day),
 _day =difference/day,
 _hour =difference/hour,
 _min =difference/minute;
 if(_year>=1) {result= "发表于 " + ~~(_year) + " 年前"}
 else if(_month>=1) {result= "发表于 " + ~~(_month) + " 个月前"}
 else if(_week>=1) {result= "发表于 " + ~~(_week) + " 周前"}
 else if(_day>=1) {result= "发表于 " + ~~(_day) +" 天前"}
 else if(_hour>=1) {result= "发表于 " + ~~(_hour) +" 个小时前"}
 else if(_min>=1) {result= "发表于 " + ~~(_min) +" 分钟前"}
 else result="刚刚";
 return result;
}

代码有借鉴别人的代码的部分.

好,现在,我们可以通过一个goodTime(str)的方法函数,来将接口给我们的时间格式修改为我们想要的.现在的问题就是,我们怎么来用这个函数了.

笨方法,直接修改原始数据

首先,我们通过ajax拿到了数据,然后再把数据交给vue进行渲染.那我们在这个中间可以进行一个操作,把所有的数据全部处理一遍,然后把处理过的数据再交给vue去渲染.就可以解决这个问题了.

说干就干,我们看代码:

function pushDom(data){
 // 先进行遍历,把数据中的所有时间全部修改一遍
 for (var i = 0; i < data.data.length; i++) {
 data.data[i].create_at = goodTime(data.data[i].create_at);
 };
 // 然后再交给 vue 进行渲染
 var vm = new Vue({
 el: '.list',
 data: data
 });
}

好,通过上面的处理,我们再来看一下最终的页面效果.如下:

VUEJS实战之修复错误并且美化时间(2)

成功了.

VUE自定义过滤器方法

上面虽然我们成功了.但是,直接在VUE之前搞了一个for循环,实在是有点不太优雅.而且,我们要学习VUE啊,这算哪门子学习呢….

好,我们下面用VUE的自定义过滤器功能来进行处理.

官方教程,自定义过滤器 http://vuejs.org.cn/guide/custom-filter.html

function pushDom(data){
 // 使用vue自定义过滤器把接口中传过来的时间进行整形
 Vue.filter('time', function (value) {
 return goodTime(value);
 })
 var vm = new Vue({
 el: '.list',
 data: data
 });
}

并且,我们需要修改我们的html部分,如下:

<time class="time"  v-text="info.create_at | time"></time>

好,实现效果是一模一样的.但是代码看上去优雅了很多.关键是,我们在这个过程中,学习和掌握了自定义过滤器的使用.其实,在很多情况下,接口给我们的数据往往是不适合直接在页面中渲染的,所以这个功能就是非常重要并且非常常用的了.

小结
 1.v-bind 绑定元素属性方法
 2.v-text 输出文本方法
 3.vue 自定义过滤器的使用

附录

本文由FungLeo原创

首发地址:http://blog.csdn.net/FungLeo/article/details/51649074

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于JQuery的简单实现折叠菜单代码
Sep 15 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
javascript 树形导航菜单实例代码
Aug 13 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
javascript实现禁止复制网页内容
Dec 16 Javascript
JS实现图片局部放大或缩小的方法
Aug 20 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
JS中的函数与对象的创建方式
May 12 Javascript
小程序开发之模态框组件封装
Apr 23 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
Nov 02 Javascript
Bootstrap表单Form全面解析
Jun 13 #Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 #Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
Jun 13 #Javascript
多种jQuery绑定事件的实现方式
Jun 13 #Javascript
JS Ajax请求如何防止重复提交
Jun 13 #Javascript
JavaScript判断微信浏览器实例代码
Jun 13 #Javascript
JavaScript判断是否是微信浏览器
Jun 13 #Javascript
You might like
PHP连接SQLServer2005的方法
2015/01/27 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
javascript的函数
2007/01/31 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
react 生命周期实例分析
2020/05/18 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
药品质量检测应届生求职信
2013/11/14 职场文书
公司薪酬管理制度
2014/01/31 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS