同时使用jQuery timeago或者momentjs和AngularJS

我想用timeago插件使date看起来更好。 问题是这些date是通过dynamic从REST的AngularJS获取。 所以,当我将这个jQuery插件附加到我的页面时,它不会处理它。

那么,如何做得更好呢? 如果可能的话,我会很乐意运行没有jQuery。

我会用momentjs – http://momentjs.com/ – 它没有依赖关系。

然后,您可以创build一个名为“timeAgo”或“fromNow”的filter。 你可能应该从现在fromNow调用它,因为那是什么时候调用的:

 angular.module('myApp').filter('fromNow', function() { return function(date) { return moment(date).fromNow(); } }); 

那么你只需要在你的视图中使用简单的数据绑定:

 <p>Pizza arrives {{pizzaArrivalDate | fromNow}}</p> 

如果你真的想使用jQuery插件,你可能不得不写一个指令。 但是这样做是不好的,因为它将您的数据链接到DOM元素。 我上面提到的方法是从DOMangular度分离数据。 这很漂亮: – D

您可以使用angular度矩模块(基于momentjs)的am-time-ago指令。

它不需要jQuery,时间随着时间的推移而更新。 例:

 <span am-time-ago="lastLoginTime"></span> 

上述跨度的内容将被replace为相对时间string,例如“2小时前”,随着时间的推移会自动更新。

moment.js是最好的select。 我创build了一个通用的时刻filter,允许您使用任何时刻的格式化方法。

 angular.module('myApp', []) .filter('moment', [ function () { return function (date, method) { var momented = moment(date); return momented[method].apply(momented, Array.prototype.slice.call(arguments, 2)); }; } ]); 

像使用它

 <div>{{ date | moment:'fromNow' }}</div> <div>{{ date | moment:'calendar' }}</div> 

你可以在这里检查它的行动http://jsfiddle.net/gregwym/7207osvw/

如果你需要jQuery,编写一个指令/filter是要走的路。

 app.directive("timeAgo", function($compile) { return { restrict: "C", link: function(scope, element, attrs) { jQuery(element).timeago(); } }; }); app.filter("timeAgo", function() { return function(date) { return jQuery.timeago(date); }; }); 

指令和/或filter(jsbin)