将值替换为 ng-repeat 中的 API 值

Replace value with API value in ng-repeat

我在视图中列出了一堆 JSON 对象,但只包含了它的类别 ID。不是我需要显示的名称。我必须单独调用 $http 来处理哪些项目匹配。值不会呈现以供查看。代码:

$scope.cardCategories = function(id) {
  angular.forEach($scope.categoryFilter, function(category, index){
    if (category.id == id) {
      //console.log(category.name);
      return category.name;
    } else {
      return;
    }
  })
}

简化的 ng-repeat 中的值

<div ng-repeat="topic in latest">
    {{cardCategories(topic.category_id)}}
</div>

我也试过把它写成一个过滤器,但是值不会显示。控制台显示匹配项。我怀疑我必须处理原始 latest 数组。谢谢。

.filter('cardCategories', function($rootScope, $state){
return function(catId) {
  if (catId !== undefined && $rootScope.cardCategories) {
    angular.forEach($rootScope.cardCategories.categories, function(category, index){
      if (category.id == catId.category_id) {
        return category.name;
      } else {
        return;
      }
    })
  }
}
})

查看:

{{topic.category_id | cardCategories}}

回调函数forEach中的那个return语句不会return一个来自$scope.cardCategories的值,它returns something 来自你提供给 forEach 的回调(并且 angular 愉快地忽略它)。尝试这样的事情:

$scope.cardCategories = function(id) {
  var i = $scope.categoryFilter.length; // assuming it's an array 

  while(i--) {
   if($scope.categoryFilter[i].id === id) {
     return $scope.categoryFilter[i].name;
   }
  }
};

此外 -- 没有办法中断(提前停止)angular.forEach 循环,因此出于性能原因,如果您在 array/object 中定位某些内容,最好避免它。

如果当前迭代与您传入的 ID 不匹配,您需要确保 forEach 循环不会执行 return

从你的 if 语句中取出 else 条件

$scope.cardCategories = function(id) {
  angular.forEach($scope.categoryFilter, function(category, index){
    if (category.id == id) {
      return category.name;
    }
  });
};