2017-07-14 64 views
1

我有一个数组与3个对象,然后1个对象(或更多取决于3个第一个对象的选择),然后5个数组(或更多的根据5个数组的选择)Angular 1 - 复杂的ng重复对象/数组

repeat="item in $ctrl.project[$ctrl.checkProject()].productType[$ctrl.ckeckProductType()] 

//method to search for the item 
     checkProject() { 
     if (this.project.label === 'business') { 
      return 0 
     } else if(this.project.label === 'realEstate') { 
      return 1 
     } else if (this.project.label === 'smallBusiness'){ 
      return 2 
     } 
     } 

而同为ckeckProductType()方法

是不是有一个更复杂的解决方案,以激励所有这一切?

+1

当然 - 在控制器中只运行一次**,而不是'return 0/1/2;'保存值:'this.project_label = this.checkProject();'和'this。 project_type = this.ckeckProductType();'然后在循环中使用这些属性:$ ctrl.project [$ ctrl.project_label] .productType [$ ctrl.project_type] –

回答

0

最简单的方法是将结果序列包装到方法中。水木清华这样的:

data-ng-repeat = "object in getMyObjects() track by $index" 

有了这个,你会选择逻辑打动你的地方控制它应该是。但是,从性能方面来看这并不好。函数将被称为每个摘要,并会吃掉你的资源。

另一种方法是定义序列的依赖项(this.project.label等)并跟踪它们的更新。当他们更新时,你会改变你的顺序。这种方法需要更多代码,维护起来有点难,但速度稍快(直到你的序列不包含1000+项)

所以这取决于你走什么路。 希望这有助于。

P.S.有第三种方法。将所有合并成一个序列并为此写入过滤器。 P.P.S.最后一个是可能的,但不要这样做,这是一个小晚上的笑话。