2016-04-01 15 views
0

私はAngularJSでかなり新しくなっていますので、私の無知や不適切な用語を許してください。オブジェクトごとにng-repeatに新しいオブジェクトのプロパティを追加する

アクティビティオブジェクトの配列を返すactivitiesControllerというコントローラがあります。各アクティビティオブジェクトには、ng-repeat = "activity in activities"を使用して表示できるいくつかのプロパティがあります。

プロパティの1つは、ハックして元のアクティビティオブジェクトの新しいプロパティに追加する必要がある大きな文字列です(これは恐ろしいですが、レガシーシステムのものです)。

ng-repeat = "getNewProperties(activities)のアクティビティ"のような関数をng-repeatで実行します。ここで、各アクティビティをループし、ng-repeatに戻します。

OR

私はちょうど私が探している各プロパティを返しますスコープ内の関数を作成してください。

理想的には、activity.newDetails.NewValueを使用すると、ビュー内でng-repeatに渡される前にすべてのアクティビティオブジェクトで自分の関数を実行する必要があります。

申し訳ありませんこれは非常に詳細ではありませんが、私はすぐに追加しようとすることができます。

+0

ビューがバインドするデータを100%にすることをお勧めします。言い換えれば、あなたが望むものではないものに対しては、何も繰り返さないようにしてください。それを最初に変換してからバインドします。変換が何度も何度も実行される可能性があるので、この場合は関数を使用するのが最善ではないでしょう。 –

+0

感謝の気持ちになるあなたの応答に感謝します。何かがちょうどまだクリックされていない。あなたの説明に感謝します。乾杯! –

答えて

1

ng-repeat = "getNewProperties(activities)のアクティビティ"のような関数を実行します。ここで、各アクティビティをループし、ng-repeatに戻します。

のは、あなたがこれをしなかったとしましょうと関数は次のようなものになります。

$scope.getNewProperties = function(activities) { 
    var modifiedActivities = []; 
    for (var i = 0; i < activities.length; i++) { 
    var modifiedActivity = activities[i]; 
    modifiedActivity.foo = "bar"; 
    modifiedActivities.push(modifiedActivity); 
    } 
    return modifiedActivities; 
}; 

をこの関数は、すべての$ダイジェストサイクルで実行されます。リソースを消費すること以外にも、変更されたプロパティ(この場合はfoo)を変更すると、次回この関数を実行するときに、この関数によってプロパティが上書きされることを意味します。

データを取得したらすぐに$scope.activitiesを変更してください。この方法では、データを更新しない限り、1回だけ発生します。例えば

$http.get("http://somewebsite/api").then(function(response) { 
    $scope.activities = response.data; 

    for (var i = 0; i < $scope.activities.length; i++) { 
    // modify properties 
    } 
}); 
+0

ありがとうございます。それは私が探していたものを達成するための最良の方法を理解するのに役立ちます。 –

関連する問題