2014-11-03 44 views
0

做一个循环回路内的一个观点:

<tr ng-repeat="result in results"> 
    <td> 
     <span ng-repeat="device in helpers.getIosDevices(result.ios_device)"> 
      {{ device.code }} 
     </span> 
    </td> 
</tr> 

控制器:

$scope.helpers = CRM.helpers; 

助手:

var CRM = CRM || {}; 

CRM.helpers = { 
    // Handle "111" value format 
    getIosDevices: function (devices) { 
     var obj = []; 

     if (devices !== null && devices !== undefined) { 
      if (devices.charAt(0) === '1') { 
       obj.push({ 
        code: 'ipod', 
        name: 'iPod', 
       }); 
      } 
      if (devices.charAt(1) === '1') { 
       obj.push({ 
        code: 'ipad', 
        name: 'iPad', 
       }); 
      } 
      if (devices.charAt(2) === '1') { 
       obj.push({ 
        code: 'iphone', 
        name: 'iPhone', 
       }); 
      } 
     } 

     return obj; 
    } 
}; 

得到这个错误:https://docs.angularjs.org/error/ $ rootScope/infdig?p0 = 10 & p1 =%5B%5B%22fn:%E2%80%A620%20%20%7D;%20newVal:%20undefined;%20oldVal:%20undefine d%22%5D%5D

据我所知,但我不知道如何解决它在我的情况。我应该使用哪种解决方法?

回答

1

在摘要循环中尝试更改ng-repeat指令中的源列表时出现此错误的原因。

<span ng-repeat="device in helpers.getIosDevices(result.ios_device)"> 
            ^^^^^^^^ 
getIosDevices

首先

obj.push(/* ... */)我们需要问我们的自我消化时周期将停止循环:它将停止角时检测到几个迭代名单没有改变。在你的情况下,每当ng-repeat调用getIosDevices方法 - 列表获取不同的项目,因此它再次循环,直到你得到限制和Angular下降这个异常。


那么,什么是一个解决方案:

在角它不是很好的做法,调用方法的GetList()ngRepeat。因为开发人员造成错误。

它清楚地表明你的情况getIosDevices()列表取决于results因此,我将在results创建不同固定一些观察家对象,写HTML部分,如:

<tr ng-repeat="result in results"> 
    <td> 
     <span ng-repeat="device in devices[result.ios_device]"> 
      {{ device.code }} 
     </span> 
    </td> 
</tr> 

其中devices代表地图。


这是一些演示,可以帮助你:

$scope.results = [{ 
     ios_device: "100" 
    }, { 
     ios_device: "010" 
    }, { 
     ios_device: "001" 
    }]; 


    $scope.devices = { 
     "100": [{ 
      code: 'ipod', 
      name: 'iPod1', 
     }, 
       { 
      code: 'ipod', 
      name: 'iPod2', 
     }], 
      "010": [{ 
      code: 'ipod', 
      name: 'iPod1', 
     }, 
       { 
      code: 'ipad', 
      name: 'iPad2', 
     }], 
      "001": [{ 
      code: 'ipod', 
      name: 'iPod1', 
     }, 
       { 
      code: 'iphone', 
      name: 'iphone2', 
     }], 
    } 

HTML

<table> 
    <tr ng-repeat="result in results"> 
     <td><span ng-repeat="device in devices[result.ios_device]"> 
     {{ device.code }} 
    </span> 

     </td> 
    </tr> 
</table> 

演示在Fiddle

+0

那么如何重写这个以避免异常呢?在大多数情况下,创建的数组总是相同的。 – Syl 2014-11-03 09:20:13

+0

@sylouuu增加了一些演示 – 2014-11-03 09:38:27

+0

谢谢你的作品! – Syl 2014-11-03 09:56:17