【问题标题】:Angular 1 - complex ng-repeat objects/arraysAngular 1 - 复杂的 ng-repeat 对象/数组
【发布时间】:2017-08-02 22:53:26
【问题描述】:

我有一个包含 3 个对象的数组,然后是 1 个对象(或更多,取决于 3 个第一个对象的选择),然后是 5 个数组(或更多,取决于 5 个数组的选择)

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() 方法也是如此

难道没有更复杂的解决方案来激发这一切吗?

【问题讨论】:

  • 当然 - 在控制器中运行这两个函数只运行一次,而不是 return 0/1/2; 保存值:this.project_label = this.checkProject();this.project_type = this.ckeckProductType(); 然后在循环中,使用那些属性:item in $ctrl.project[$ctrl.project_label].productType[$ctrl.project_type]

标签: javascript angularjs angularjs-ng-repeat ui-select


【解决方案1】:

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

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

这样,您将选择逻辑移动到它应该在的控制器中。 但是,从性能方面来说并不好。函数将被调用每个摘要,并会吃掉你的资源。

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

所以,走哪条路取决于你。 希望这会有所帮助。

附:还有第三种方法。将所有内容合并为一个序列并为此编写过滤器。 附言最后一个是可能的,但不要这样做,这是一个晚上的小玩笑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多