Javascript 使用带有ng repeat的函数导致无限摘要循环

Javascript 使用带有ng repeat的函数导致无限摘要循环,javascript,angularjs,promise,angularjs-ng-repeat,angular-promise,Javascript,Angularjs,Promise,Angularjs Ng Repeat,Angular Promise,我有下面的代码 。请将窗口完全展开以查看整个视图 我有类别和子类别显示在导航栏中,如上图所示。每个类别都有要显示的服务/子类别 我使用2个嵌套的ng重复,内部的一个使用来自ng重复的父迭代的值。我已将函数getServicesByCategory附加到内部ng repeat,该函数从DocumentsFactory调用getServicesByCategory,并解析返回数组对象子类别中的数据的承诺,最终应通过内部ng repeat进行迭代 类别显示正常,但子类别显示不正常 这有两个问题 一,。

我有下面的代码

。请将窗口完全展开以查看整个视图

我有类别和子类别显示在导航栏中,如上图所示。每个类别都有要显示的服务/子类别

我使用2个嵌套的ng重复,内部的一个使用来自ng重复的父迭代的值。我已将函数getServicesByCategory附加到内部ng repeat,该函数从DocumentsFactory调用getServicesByCategory,并解析返回数组对象子类别中的数据的承诺,最终应通过内部ng repeat进行迭代

类别显示正常,但子类别显示不正常

这有两个问题

一,。每个类别显示的子类别都相同,并且显示的子类别属于外部ng重复迭代中的最后一个类别,即公用事业服务。相反,每个类别都应该显示自己的子类别

二,。控制台显示由于尝试次数超过10次而导致无限摘要循环中止的多个错误,这些错误$rootScope/infdig?p0=10&p1=%5B%5D在控制台中重复出现。在触发多个摘要周期的无限循环中调用方法GetServicesByCategoris

似乎是一个简单的分类问题,由Angular的脏检查和摘要循环复杂化

我阅读了多个线程和帖子,建议不要在与ng repeat相关联的函数中返回新对象,我没有这样做。我返回子类别的引用

内部ng重复取决于外部ng重复的数据。将函数绑定到ng repeat是我唯一的选择。这是正确的方法吗?获取类别和子类别的API是不同的,我没有修改它们的灵活性。我一直无法想出一个解决办法。只想对每个类别的子类别进行右转

任何帮助都将不胜感激


注意:打开“完整视图”窗口以查看左侧的导航栏。

这里的解决方案是获取所需的所有数据并创建一个类别数组,每个类别都包含自己的子类别。并在嵌套的ng重复中使用此对象

请检查我的plunker更新版本:

如您所见,我使用:

ng-repeat="category in documents.categories"
在外部ng中,重复并:

在里面

在控制器中,我以以下方式构建category.subCategories:

documentsFactory
  .getCategories() // Get categories
  .then(function(response) { // Extract them from the response
    return response.data.subCategory;
  })
  .then(getSubcategories) // For every catgory, get its own subcategory
  .then(function(categories) { // Add categories to the $scope
    self.categories = categories;
  });
其中getSubcategories是:

documentsFactory
  .getCategories() // Get categories
  .then(function(response) { // Extract them from the response
    return response.data.subCategory;
  })
  .then(getSubcategories) // For every catgory, get its own subcategory
  .then(function(categories) { // Add categories to the $scope
    self.categories = categories;
  });
function getSubcategories(categories) {
  console.log(categories)
  var retrievSubcategories = categories.map(function(category) { // Create a promise to get the subcategories for every category
    return documentsFactory
      .getServicesByCategory(category.name) // Get the subcategories for the given category
      .then(function(response) {
        category.subCategories = response.data.documents; // Add subgategories to the category
        return category;
      });
  });
  return $q.all(retrievSubcategories) // Return a promise resolve only when all the subcategories for every category are retrieved
}