2016-04-01 27 views
0

我对AngularJS相当新,所以请原谅我的无知和不适当的术语。在ng-repeat中为每个对象添加新的对象属性

我有一个名为activitiesController的Controller,它返回一个活动对象数组。每个活动对象都有一些属性,我可以在视图中使用ng-repeat =“activity in activity”显示。

其中一个属性是我需要破解的一个大字符串,基本上添加到活动对象的新属性(我知道这很可怕,但它来自遗留系统)。

我是否在ng-repeat中运行一个函数,如ng-repeat =“getNewProperties(activities)中的活动”,我将循环每个活动并将数组返回到ng-repeat。

OR

难道我只是在做这将返回我要找的每个属性范围的功能。

理想情况下,在视图中,我只是使用activity.newDetails.NewValue,这使我beielve我需要在所有活动对象上运行我的函数,然后它们被传递到视图中的ng重复。

对不起,我知道这不是很详细,我可以尝试添加更多。

+0

最好将数据视为绑定到100%它所需要的数据。换句话说,不要试图重复一些不太符合你想要的东西。首先进行转换,然后进行绑定。在这种情况下可能不是最好使用函数,因为转换可能会运行很多次。 –

+0

感谢您的回应,确实有很多意义。有些东西还没有完全点击。我感谢你的解释。干杯! –

回答

1

我是否在ng-repeat中运行一个函数,如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。这种方式只会发生一次,除非刷新数据。例如

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

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

非常感谢。这有助于我理解实现我所寻找的最佳方式。 –