2013-10-29 10 views
22

私は$http.get()の結果をループするng-repeat要素を持っています。角度JS日付フィルタが機能しない

<tr ng-repeat="blog in posts"> 
    <td style="text-align:center">{{ $index+1 }}</td> 
    <td>{{ blog.title }}</td> 
    <td> 
     {{ blog.author.name }} 
    </td> 
    <td> 
     {{ blog.created_at | date:'MMM-dd-yyyy' }} 
    </td> 
</tr> 

私は、MySQLデータベースのテーブルにtimestampとしてcreated_atを持っています。そして私はangular.js v1.0.7を使用しています。

dbテーブルから同じ出力が得られていて、フィルタが機能していません。これをどうすれば解決できますか?

私のAJAX呼び出し、

$http({method: 'GET', url: 'http://localhost/app/blogs'}). 
success(function(data, status, headers, config) { 
    $scope.posts = data.posts; 
}). 
error(function(data, status, headers, config) { 
    $scope.posts = []; 
}); 

答えて

14

を助けることを願っています、それはlaravelの雄弁から文字列としてcreated_atを返します。

これは、このJavaScriptを使用して解決することができ、

new Date("date string here".replace(/-/g,"/")); 

だから、コード、

$http({method: 'GET', url: 'http://localhost/app/blogs'}). 
success(function(data, status, headers, config) { 
    angular.forEach(data.posts, function(value, key){ 
    data.posts[key].created_at = new Date(data.posts[key].created_at.replace(/-/g,"/")); 
    } 
    $scope.posts = data.posts; 
}). 
error(function(data, status, headers, config) { 
    $scope.posts = []; 
}); 
+0

私はなぜそれを使うべきではないのですか? – Vignesh

+1

@Vigneshはい、私はそれを利用すべきです。 – devo

39

タイプのjavascript日であることが必要フィルタに渡された日付。

blog.created_atがフィルタなしで表示されていることを確認しましたか?

あなたのバックアップサービスは、日付を表す文字列を返していると言いました。これは2つの方法で解決できます。

  1. をサーバー側のコードを作成し、サーバー側のコードは、それが
  2. は、あなた自身のを書く返すJSONをシリアライズする方法
    • チェックJSONの日付オブジェクトを返します文字列の日付を受け取り、日付を必要な形式で返すフィルタ
      • :独自のフィルタで角度フィルタを呼び出すことができます

あなたは次のように独自のフィルタを作成することができます。

app.filter('myDateFormat', function myDateFormat($filter){ 
    return function(text){ 
    var tempdate= new Date(text.replace(/-/g,"/")); 
    return $filter('date')(tempdate, "MMM-dd-yyyy"); 
    } 
}); 

をそして、あなたのテンプレートでこのようにそれを使用します。

<td> 
    {{ blog.created_at | myDateFormat }} 
</td> 

よりもむしろ返された配列をループして、適用しますフィルタ

+0

app.filter('stringToDate',function ($filter){ return function (ele,dateFormat){ return $filter('date')(new Date(ele),dateFormat); } }) 

は、次のコードのように任意のテンプレートでこのフィルタを使用しますいくつかの答えで。しかし、私は '' $ http''呼び出しでこれをどのように達成できますか?私は '' 2013-10-08 00:00:00'を取得しています。 – devo

+0

ありがとう、私はタイムスタンプ形式で自分の日付があると説明しましたが、私はスニペットで明確なコードを期待しています。だから私はいくつかの正規表現を使用してこれを変換する。私は最終的な作業結果を掲載しました。適切な説明については – devo

+0

+1。 – devo

6

0からのフェッチされたデータに基づいてnew Date(/*...*/)を作成できます、のように:

$scope.date = new Date('2013', '10', '28'); // for example 

とにかくあなたがPlunkerでこのデモを見ることができます。

が、それは、サーバー側からあなたに

+0

ありがとうございます、私はタイムスタンプ形式で自分の日付が記載されています。だから私はいくつかの正規表現を使用してこれを変換する。私は最終的な作業結果を掲載しました。説明のために – devo

+0

+1、ここに私の適切な解決策を掲載しました。 – devo

2

レコード日付変数は、以下のように '新しい' キーワードを使用することを忘れないでください:

var time = new Date(); 

これ以外の場合:

var time = Date(); 

日付は関数として呼び出され、フィルタへの入力として使用できない日付時刻文字列が返されます。

6

次のコードのように、文字列を日付に変換するカスタムフィルタを追加することができます:私はこれを気づいた

<div ng-repeat = "a in data">{{a.created_at |stringToDate:"medium"}}</div> 
関連する問題