如何在ng-repeat

时间:2016-06-21 15:44:34

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

我有一个HTML代码

<tr ng-repeat='row in po123'>
           <td>{{row.buyerLineItemNumber}}</td>
           <td>{{row.buyerPartNumber}}</td>
           <td>{{row.supplierPartNumber}}</td>
           <td>{{row.itemDescription}}</td>
           <td>{{row.itemQuantity}}</td>
           <td>{{row.itemQuantityUOM}}</td>
           </tr>

和范围元素

var poNumber = "123";
$scope.poNumber = poNumber;
 $scope["po"+poNumber] = [{'buyerLineItemNumber':'12121','buyerPartNumber':'buyerPartNumber','supplierPartNumber':'supplierPartNumber','itemDescription':'itemDescription','itemDescription':'itemDescription','itemQuantityUOM':'itemQuantityUOM'}];

在appication中,poNumber是动态生成的,可以作为$ scope值使用,我使用poNumber创建一个动态范围元素。如何在ng-repeat中使用此动态创建的范围元素。

如果我在代码片段中静态指定它工作正常,我想指定类似<tr ng-repeat='row in "po"+{{poNumber}}'>

的内容

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:0)

两个选项:

首先:

var poNumber = "123";
$scope.poNumber = poNumber;
$scope.myData = {};
$scope.myData["po"+poNumber] = [{'buyerLineItemNumber':'12121','buyerPartNumber':'buyerPartNumber','supplierPartNumber':'supplierPartNumber','itemDescription':'itemDescription','itemDescription':'itemDescription','itemQuantityUOM':'itemQuantityUOM'}];

和html:

<tr ng-repeat='row in myData["po"+poNumber]'>

第二

// add to controller
$scope.getByName = function (value) { 
  return $scope[value]
};

和html:

<tr ng-repeat='row in getByName("po"+poNumber)'>

答案 1 :(得分:0)

似乎您使用poNumber作为范围中每个数据的id,您只需要使用一个对象数组。

如果你设置:

$scope.myArray = [];

每当你想添加一个带有买方数据的新对象时,你只需要在控制器中执行函数或方法或监听器的下一个内容,这取决于你需要什么:

var newBuyerData ={
'buyerLineItemNumber':'12121',
'buyerPartNumber':buyerPartNumber,
'supplierPartNumber':supplierPartNumber,
'itemDescription':itemDescription,
'itemDescription':itemDescription,
'itemQuantityUOM':itemQuantityUOM};

$scope.myArray.push(newBuyerData);

然后您将拥有一个包含您想要显示的对象的数组,然后您将能够执行ng-repeat,因为用于该类型的数据,ng-repeat实例化集合中的每个项目数据。

<tr ng-repeat='row in myArray'>
           <td>{{row.buyerLineItemNumber}}</td>
           <td>{{row.buyerPartNumber}}</td>
           <td>{{row.supplierPartNumber}}</td>
           <td>{{row.itemDescription}}</td>
           <td>{{row.itemQuantity}}</td>
           <td>{{row.itemQuantityUOM}}</td>
 </tr>

通过此功能,您可以获得所有数据列表,并列出您想要的所有数据。

另一方面,如果你只想展示一个买家,你仍然可以拥有一系列买家数据,只需添加一个名为id(element_id)的字段生成randombly,它就是这样的东西:

var idNumber = 1000;

var newBuyerData ={
'element_id': idNubmer,
'buyerLineItemNumber':'12121',
'buyerPartNumber':buyerPartNumber,
'supplierPartNumber':supplierPartNumber,
'itemDescription':itemDescription,
'itemDescription':itemDescription,
'itemQuantityUOM':itemQuantityUOM};

$scope.myArray.push(newBuyerData);
idNumber = idNumber + 1;

这部分应该在方法或函数内部。因此,无论何时调用它,它都会将新数据添加到数组中,然后增加idNumber变量。

然后,您只需搜索所需的数据,只显示1个买方数据项。

var itemThatIWant = 123; //the number that i want, you can insert this //number with an input text or something

$scope.itemToShow = "";
 angular.forEach($scope.myArray,function(item){
    if(item.idNumber === itemThatIWant){
      $scope.itemToShow = item;
    }
});

然后在你的html中你不需要ng-repeat,你可以只使用你的itemToShow变量:

<tr >
           <td>{{itemToShow.buyerLineItemNumber}}</td>
           <td>{{itemToShow.buyerPartNumber}}</td>
           <td>{{itemToShow.supplierPartNumber}}</td>
           <td>{{itemToShow.itemDescription}}</td>
           <td>{{itemToShow.itemQuantity}}</td>
           <td>{{itemToShow.itemQuantityUOM}}</td>
</tr>

我希望它有所帮助:)