在ng-repeat中为每个对象添加新对象属性

时间:2016-04-01 00:51:34

标签: angularjs angularjs-scope angularjs-ng-repeat

我对AngularJS很新,所以请原谅我的无知和不正确的术语。

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

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

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

OR

我是否只在范围内创建一个函数,它将返回我正在寻找的每个属性。

理想情况下,在视图中我只使用activity.newDetails.NewValue,这使得我需要在所有活动对象上运行我的函数,然后再将它们传递给视图中的ng-repeat。

很抱歉,我知道这不是很详细,我可以尽快添加更多内容。

1 个答案:

答案 0 :(得分:1)

  

我是否在ng-repeat中运行一个函数,例如ng-repeat =" getNewProperties(活动)中的活动"我将遍历每个活动并将数组返回到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;
};

此功能将在每个$ digest周期中运行。除了消耗资源之外,它还意味着如果您对已修改的属性进行更改(在本例中为foo),则下次运行此函数时,该函数将覆盖该属性。

您要做的是在获取数据后立即修改$scope.activities。这样,除非刷新数据,否则它只会发生一次。 e.g。

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

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