3

我知道ng-repeat仅适用于数组。非数组对象上的ng-repeat

我的问题是,当我不知道我从服务器获得的对象是数组还是唯一的对象。
我需要动态确定它是数组还是对象,并且只有在数组使用ng-repeat时。

我的问题是使用ng-repeat和条件实现的最佳方式是什么 - 只有当对象是数组时?

我试图解决这个问题是这样的:

<div ng-if="Array.isArray(myObj)"ng-repeat="item in myObj"> 
     <do-some-stuff item='item'></do-some-stuff> 
</div> 
<do-some-stuff ng-if="!Array.isArray(myObj)" item='myObj'></do-some-stuff> 

但它不工作。

回答

6

NG重复的优先级是1000和NG-如果优先级是600所以NG-重复执行,然后再NG-if.that就是为什么你的代码不能正常工作。使用此代码:

<div ng-if="Array.isArray(myObj)"> 
     <div ng-repeat="item in myObj"> 
      <do-some-stuff item='item'></do-some-stuff> 
     </div> 
</div> 
<do-some-stuff ng-if="!Array.isArray(myObj)" item='myObj'></do-some-stuff> 
+0

它的工作正常......但它一次显示数组和非数组 – Idris 2017-02-01 15:54:35

0

优先权指令可能是问题,但我会争辩说,在事业中真正的原因是在别处。

Angular尝试搜索当前$ scope的Array.isArray()的定义。 并找不到它。

您必须将对$ window的引用添加到您的控制器,然后声明您自己的函数来检查对象是否为数组。

像这样

控制器:

$scope.isArray = function(obj) { 
    //Check if Array.isArray is available (is not supported in IE8) 
    var fn = $window.Array.isArray || $window.angular.isArray; 
    return fn(obj); 
} 

HTML

<div ng-if="isArray(myObj)"> 
     <div ng-repeat="item in myObj"> 
      <do-some-stuff item='item'></do-some-stuff> 
     </div> 
</div> 
<do-some-stuff ng-if="!isArray(myObj)" item='myObj'></do-some-stuff> 
0

这可以也是另一种方式来实现。

您可以根据使用testForArray功能

<div ng-repeat="item in testForArray()"> 
     <span>{{item.name}}</span> 
     <do-some-stuff item='item'></do-some-stuff> 
</div> 

在此功能,您可以检查您所需的逻辑 的数据是否是一个数组或对象

您的条件 返回所需的阵列或空值
var myObj = [{name : '1'},{name : '3'},{name : '3'}] 


     $scope.testForArray = function(){ 
     console.log("hello") 
     if(angular.isArray(myObj)){ 
      return myObj 
     }else{ 
      return []; 
     } 

     } 

这里是plunker