2017-04-20 7 views
1

だから私は、カレンダー上の日付が選択された場合(画像を参照)、特定のデータ(仕訳)を表示しようとしています

Image of calendar.

Image of result when a date with journal entry is picked.

日付が選択され、配列にジャーナルエントリがある場合は、そのカードの下部に表示されます。

私の問題:

だから私の問題は、私は複数のエントリを持っていると私は最後に入力された以外の項目のいずれかを選ぶとき、彼らは現れないということです。しかし、最後の項目を選択すると、完全に表示されます。あなたが私を見ることができるように

var entry = { date: $scope.startDate.text, text: $scope.formData.journalEntry }

マイコード:

$scope.journalData = {}; 
 
for (var i = 0; i < $scope.entryArray.length; i++) { 
 
    if ($scope.entryArray[i].date == $scope.startDate.text) { 
 
    $scope.journalData = $scope.entryArray[i]; 
 
    console.log($scope.journalData); 
 
    } else { 
 
    $scope.journalData = {}; 
 
    } 
 
}
<div class="card"> 
 
    <div class="item item-divider"> 
 
    {{journalData.date}} 
 
    </div> 
 
    <div class="item item-text-wrap"> 
 
    {{journalData.text}} 
 
    </div> 
 
</div>

$scope.entryArrayはそうのように格納されているすべてのジャーナルエントリを保持するローカルストレージからのアレイであります選択された日付と日付が一致するときはいつでもコンソールログに記録されます。今日(4月20日)、明日、翌日に3つのエントリーがあるとしましょう。

{date: "Thu Apr 20 2017", text: "asdfasdf"} {date: "Fri Apr 21 2017", text: "asdfasdfasdf"} {date: "Sat Apr 22 2017", text: "asdfasdfasdf 3"}

と3番目の日付変更について:ここに出力されます。カードは画面の下部にデータを表示します(そうすべきです)。

誰かが私がログをコンソールに出力して正しい変数に格納されているのになぜ3番目のエントリしか表示しないのか理解できますか?

+0

'else'ブロックを削除すると正しく動作するはずです。 –

+0

ok。超簡単な修正....それはなぜ問題を引き起こしていたのですか? – Austin

+0

私は以下の答えで説明しました。 –

答えて

1

journalDataは、最初の日付を選択すると、forループの最初の繰り返しで正しい値を持ちます。しかし、次の反復では、ifブロックで日付が一致しないため、elseブロックを実行するので、journalData変数は再び空です。

elseブロックを削除すると機能するはずです。 forループの開始前にすでにjournalDataを空白に設定しているので、elseブロックは必要ありません。

また、一致が見つかるとbreakを追加することで、コードをさらに最適化することができます。この中

for (var i = 0; i < $scope.entryArray.length; i++) { 
    if ($scope.entryArray[i].date == $scope.startDate.text) { 
    $scope.journalData = $scope.entryArray[i]; 
    console.log($scope.journalData); 
    break; 
    } else { 
    $scope.journalData = {}; 
    } 
} 

、それは日付の一致度forループを中断します:それは何かのようになります。

関連する問題