同时使用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)