4

我知道 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>

但它不起作用。

4

3 回答 3

7

ng-repeat priority is 1000 and ng-if priority is 600. so ng-repeat execute first and then ng-if.that's why your code not working .use this code:

<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>
于 2014-10-27T16:51:14.873 回答
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>
于 2014-10-30T14:45:31.940 回答
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

于 2015-06-24T05:51:11.830 回答