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 相关文章推荐
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
Apr 23 Javascript
用js实现控件的隐藏及style.visibility的使用
Jun 14 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
使用ajax+jqtransform实现动态加载select
Dec 01 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
完美JQuery图片切换效果的简单实现
Jul 21 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 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
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python numpy数组转置与轴变换
2019/11/15 Python
python实现感知机模型的示例
2020/09/30 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
ajax是什么及其工作原理
2012/02/08 面试题
班班通项目实施方案
2014/02/25 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
食品安全责任书范本
2015/05/09 职场文书
小学远程教育工作总结
2015/08/13 职场文书
Python安装使用Scrapy框架
2022/04/12 Python