timeago プラグインを使用して、日付をより見栄えよくしたいと考えています。問題は、これらの日付が AngularJS を介して REST から動的に取得されることです。したがって、この jQuery プラグインを自分のページに添付すると、処理されません。
では、そのようなことをよりよく行うにはどうすればよいでしょうか。可能であれば、jQuery をまったく使用せずに実行できれば幸いです。
timeago プラグインを使用して、日付をより見栄えよくしたいと考えています。問題は、これらの日付が AngularJS を介して REST から動的に取得されることです。したがって、この jQuery プラグインを自分のページに添付すると、処理されません。
では、そのようなことをよりよく行うにはどうすればよいでしょうか。可能であれば、jQuery をまったく使用せずに実行できれば幸いです。
私は momentjs を使用します - http://momentjs.com/ - 依存関係はありません。
次に、「timeAgo」または「fromNow」というフィルターを作成するだけです。fromNow
それがmomentjsがそれを呼び出すものであるため、おそらくそれを呼び出す必要があります。
angular.module('myApp').filter('fromNow', function() {
return function(date) {
return moment(date).fromNow();
}
});
次に、ビューで単純なデータ バインディングを使用します。
<p>Pizza arrives {{pizzaArrivalDate | fromNow}}</p>
本当に jQuery プラグインを使用したい場合は、おそらくディレクティブを作成する必要があります。しかし、その方法は、データを DOM 要素にリンクするため、良くありません。上記の方法は、角度のある方法である DOM からデータを分離します。そして、それはかなりです:-D
angular-momentモジュール ( Moment.jsam-time-ago
に基づく) のディレクティブを使用できます。
jQuery を必要とせず、時間の経過とともに時間が更新されます。例:
<span am-time-ago="lastLoginTime"></span>
上記のスパンの内容は、「2 時間前」などの相対時間文字列に置き換えられ、時間の経過とともに自動的に更新されます。
moment.js が最適です。任意のモーメント フォーマット メソッドを使用できる一般的なモーメント フィルターを作成しました。
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 が必要な場合は、ディレクティブ/フィルターを作成することをお勧めします。
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);
};
});