2017-03-03 11 views
2

3つの異なるAPIエンドポイントからデータを取得するAngularJSで作成されたカレンダーアプリケーションがあります。 ng-showを使用してデータエンドポイントの日付範囲とJavascriptで生成された日付を比較する際に問題があります。ng-show条件を使用して2つの異なる日付形式を比較するAngularjs

これはコードです:

<tr ng-repeat="date in futureDates"> 
    <td> {$ date | date : 'yyyy-MM-dd' $} </td> 
    <td ng-repeat="users in calendar_users track by $index" 
     ng-show="users.fields.team_name == team.pk"> 
     <span ng-repeat="activities in calendar_activities track by $index" 
      ng-show="activities.fields.user == users.fields.username && 
         activities.fields.date == date | date 'yyyy-MM-dd'"> 
      {$activities.fields.activity$} 
      {$activities.fields.date | date $} 
     </span> 
    </td> 
</tr> 

最初<td>タグは日付の30日を一覧表示し、第二<td>タグは値を比較し、それらが一致かどうかを確認するために<span>内部を使用しています。このコード行のために

:コードのng-show一部で

<span ng-repeat="activities in calendar_activities track by $index" 
     ng-show="activities.fields.user == users.fields.username && 
       activities.fields.date == date | date 'yyyy-MM-dd'"> 

&& 前の最初の状態を正しく評価しますが、&&後の状態を正しく評価しません。

activities.fields.date

date | date 'yyyy-MM-dd'">が自動的にジャバスクリプトによって生成された日付のリストである(例として)2017年3月9日の日付フォーマットを有します。日付はタイムスタンプ形式になっていますので、なぜ私はコード| date 'yyyy-MM-dd'の次の部分を使って、それを比較している同じ日付になるようにしようとしました。

This is how the calendar looks like

両方の条件が真と評価され、すべての結果がプリントアウトされます。 (注:私は&& activities.fields.date == date | date 'yyyy-MM-dd'"を削除した)

<span ng-repeat="activities in calendar_activities track by $index" 
     ng-show="activities.fields.user == users.fields.username">` 

<span ng-repeat="activities in calendar_activities track by $index" 
     ng-show="activities.fields.user == users.fields.username && 
       activities.fields.date == date | date 'yyyy-MM-dd'">` 

に変更されます:次のコード行が場合

が 最初の条件が正常に評価、日付だけが」doesnのそれはすべきだと評価する。

This is the end result.情報はカレンダーの各担当者に正しく関連付けられていますが、残っている唯一の問題は、セル内の情報がカレンダーの日付と比較されていないことです。列。

希望私は何をしようとしているのかを理解するのに十分な情報を提供しました。どんな助けや提案も感謝しています。

+1

日付を取り、同じ形式にして、等しいかどうかを返す関数を作ってみませんか? htmlでそのような混乱を作る代わりに、パイプを適用しようとするものではありません。 – yBrodsky

答えて

0

文字列と日付オブジェクトを比較しようとしています。これは、2番目の条件が常に失敗する理由です。日付の書式設定date | date 'yyyy-MM-dd'はデータ型を変更しません。それは表示目的のためです。 2つの日付が同じかどうかを比較することは、日付が同じでも2つの日付のオブジェクトが完全に異なるため、常に難しいです。これはこの問題を解決する1つの方法です。コントローラ

$scope.compareDate = function(fieldDateStr){ 
var fieldDate= new Date(fieldDateStr); 

if(fieldDate.getDate() == $scope.date.getDate() && 
fieldDate.getMonth() == $scope.date.getMonth() && 
fieldDate.getYear() == $scope.date.getYear()){ 
    return true; 
} 
else{ 
    return false; 
} 

     }; 

2つの日付を比較するより詳細な説明において

<span ng-repeat="activities in calendar_activities track by $index" 
    ng-show="activities.fields.user == users.fields.username && 
      compareDate(activities.field.date)"> 

hereが与えられます。

関連する問題