0

我正在學校項目中工作。我用ng-repeat創建了一些行。現在,當我想他們「addElementsByClassName」添加arraylength仍然是0。如何向Angular中的數組添加重複元素

這是我的html:

<tr class = "ingredient" ng-repeat = "i in data.Ingredients"> 
    <td>{{ i.Ingredient.Name }}</td> 
    <td>{{ i.Ingredient.Amount_g }}</td> 
</tr> 

這是在我的控制器:

$scope.allIngredients = []; 
    $scope.dashboard = MainService.getDashboard(); 

    $scope.dashboard.then (function (data) { //receive the data from a server via MainService 
     $scope.data = data; 
     $scope.allIngredientRows = document.getElementsByClassName ('ingredient'); 
     console.log ($scope.allIngredients.length); 
    }); 

我想我的行在該數組中,所以我可以稍後再用它們做些事情。但現在陣列的長度保持爲0.

+1

document.getElementsByClassName(「成分」)會給你所有誰擁有類成分的元素的數組。你需要檢查服務函數中的響應數據回調 – Deep

+0

是的,但我想修改行,而不是數據。 – JordyM

+0

你的數據對象 - 或者其他什麼 - 看起來像什麼? – IAmDranged

回答

1

#1你的方法是錯誤的。 您應該對數據進行操作,而不是對html元素進行操作。 試試這個方法:

HTML:

<tr ng-repeat="item in ingredients"> 
    <td>{{ item.Ingredient.Name }}</td> 
    <td>{{ item.Ingredient.Amount_g }}</td> 
</tr> 

控制器:

$scope.ingredients = []; 

MainService.getDashboard().then (function (data) { 
    $scope.ingredients = data.Ingredients; 

    console.log ($scope.ingredients.length); // Amount of your ingredients 
}); 

當你想添加更多的項目,使用方法:

$scope.ingredients.push(newIngredient); 

$scope.ingredients = $scope.ingredients.concat(newIngredients); 

#2諮詢

但我建議你閱讀angular.js良好做法,在JavaScript的命名約定,想想你的JSON結構。

例如:

  1. ,而不是$範圍使用:controllerAs View Syntax

  2. 遵循的規則:JavaScript Style Guide and Coding Conventions

0

你是不是給角消化週期的任何時間運行。

我希望我的行在該數組內,以便稍後可以對它們做些什麼。

嘗試檢索一行「後」在使用前右邊計數。它應該更新。 如果不是,請嘗試使用$ scope。$$ apply()來引發摘要循環。