2017-03-04 122 views
0

对于一些未知的原因NG重复从NG-路线加载的模板文件上重复了太多次:NG重复循环的次数太多

angular 
    .module('myApp', [ 
    'ngAnimate', 
    'ngCookies', 
    'ngResource', 
    'ngRoute', 
    'ngSanitize', 
    'ngTouch' 
    ]) 
    .config(function ($routeProvider) { 
    $routeProvider 
     .when('/items/item1', { 
     templateUrl: 'items/item-review.html', 
     controller: 'ItemController', 
     controllerAs: 'myCtrl' 
     }) 
     .otherwise({ 
     redirectTo: '/' 
     }); 

    }); 

HTML:

<div class="reviewItem" ng-repeat="reviewItem in myCtrl.prop"> 

    <div class="row"> 
     <div>{{reviewItem.name}} </div> 
    </div> 

</div> 

它给我5个循环,而不是物体的具有在JSON文件2个对象的阵列中的量:

[{ 
    "item": { 
     "name": "content", 
     "name2": "content2" 
    } 
}, { 
    "item": { 
     "name": "content", 
     "name2": "content2" 
    } 
}] 

控制器是这样THI S:

angular.module('dbreviewsApp') 
    .controller('ItemController', function($scope, $http) { 

    var myCtrl = this; 
    myCtrl.prop=[]; 

     $http.get('items.json') 
     .then(function(response) { 

      myCtrl.prop = response; 

     }, function(response) { 

      //Second function handles error but there is no error during the get request 

     }); 

}); 
+0

remove myCtrl.prop = [];并尝试 –

+1

请提供小提琴。 “ng-repeat循环太多次”和“5次循环”是什么意思? –

+0

从你在这里给出的东西中,有两件事情需要改变......将'myCtrl'改为'$ scope.myCtrl',并在HTML中将'{{reviewItem.name}}'改为'{{reviewItem。 item.name}}'。你怎么知道它循环5次,即使没有这些变化,它也不应该循环一次?请提供小提琴或发布完整的代码 – Nishant123

回答

0

问题是与你正在使用分配回响应数据的技术:

$http.get('items.json') 
     .then(function(response) { 

      myCtrl.prop = response; //<-- This is the problem. 

      // Comment/remove the upper line and write it like 
      myCtrl.prop = response.data; // <-- Correct technique. 

     }, function(response) { 

      //Second function handles error but there is no error during the get request 

     }); 

代替myCtrl.prop = response;,使用data属性赋值;像myCtrl.prop = response.data;

,并阐明为什么你的ng-repeat是循环5次是因为response对象包含5个属性即data, status, headers, config, statusText

0

问题是与myCtrl.prop = response;它应该是myCtrl.prop = response.data;。 请找工作Plunker

var myCtrl = this; 
    myCtrl.prop = []; 

    $http.get('items.json') 
    .then(function(response) { 

     myCtrl.prop = response.data; 
     console.log(myCtrl.prop); 

    }, function(response) { 

     //Second function handles error but there is no error during the get request 

    }); 
0

当您在响应中使用$资源,那么数据,但如果使用$ HTTP数据,然后在你的response.data

myCtrl.prop = response.data; 
0

谢谢你帮我解决。 显然问题出在传递的对象 - 默认情况下它有5个属性:config, data, headers, status, statusText,因此5次重复,“数据”定位丢失。

在ng-repeat中添加.data:myCtrl.prop.data解决了这个问题。 myCtrl.prop = response.data;正在工作。