2016-01-26 26 views
0

嗯,我会试着解释我为什么要这样做的方法。为简单起见,我修剪了代码。我想创建一个DIV里应该有<h4>BroadCategory Name</h4>和这个标题下面,我打电话一个API来获取与BroadCategory名称我可以保留范围的旧值,并更新其他值在AngualrJS

<div ng-controller="NavigationController"> 
    <div ng-repeat="primaryItems in categories"> 
     <div> 
      <h4><span>{{primaryItems.BroadCategory}}</span></h4> 
     </div> 

     <div ng-init="getImgForCategory(this.primaryItems)"> 
      <div ng-repeat="ad in ads"> 
      {{ ad.ad_type }} 
      <a ng-href="#productList/{{primaryItems.BroadCategory}}"> 
       <img src="{{ ad.images[0] }}" > 
      </a> 
      </div> 
     </div> 
    </div> 
</div> 

我的控制器相关的一些图片:

$http.get("/get_categories/") 
    .success(function(response){ 
     $scope.categories = response; 
    }) 
    .error(function (msg) { 
     console.log(msg); 
    }); 


$scope.getImgForCategory = function (categoryInfo) { 
    var category = (categoryInfo.BroadCategory); 
    $http.get('/Some_API_ad_type='+category) //API to fetch some images associated with that **BroadCategory** 
     .success(function (response) { 
      $scope.ads = response; 
     }) 
     .error(function (msg) { 
      console.log(msg); 
     }) 
} 

问题:问题是$scope.ads保留上次调用的API响应的值,因此{{ ad.ad_type }}和类似的广告属性具有所有相同的值(这是对最后一个广播类别名称的响应)

我该如何用最好的Angular方法解决这个问题?

<h1>Expected Output: </h1> 
 
<h4>BroadCategory1</h4> 
 
BC1_data1 
 
<br>BC1_data2 
 

 

 
<h4>BroadCategory2</h4> 
 
BC2_data1 
 
<br>BC2_data2 
 

 
<h1>Actual Output: </h1> 
 
<h4>BroadCategory1</h4> 
 
BC2_data1 
 
<br>BC2_data2 
 

 
<h4>BroadCategory1</h4> 
 
BC2_data1 
 
<br>BC2_data2

+1

考虑将内部与分离范围指示该数据,而不是把它放在一共享控制器的范围。 –

+0

@丹尼贝克:很酷。请记住这一点 –

+0

对于这种特殊情况,您接受的答案可能更合适,但是,是的,隔离范围是“指令A中的数据被指令B中的数据破坏”的一般解决方案“ –

回答

2

那么,在你的内心生成的HTML NG-重复所有使用相同的$ scope.ads名单。因此,如果更新,屏幕上的所有数据将只显示$ scope.ads的新值。

我会做的是链接添加到类别。如下所示:

$scope.getImgForCategory = function (categoryInfo) { 
    var category = (categoryInfo.BroadCategory); 
    $http.get('/Some_API_ad_type='+category) 
     .success(function (response) { 
      categoryInfo.ads = response; 
     }) 
     .error(function (msg) { 
      console.log(msg); 
     }) 
} 

<div ng-controller="NavigationController"> 
<div ng-repeat="primaryItems in categories"> 
    <div> 
     <h4><span>{{primaryItems.BroadCategory}}</span></h4> 
    </div> 

    <div ng-init="getImgForCategory(primaryItems)"> 
     <div ng-repeat="ad in primaryItems.ads"> 
     {{ ad.ad_type }} 
     <a ng-href="#productList/{{primaryItems.BroadCategory}}"> 
      <img src="{{ ad.images[0] }}" > 
     </a> 
     </div> 
    </div> 

+1

因此,您保存了它们所属的“以前的”api响应,即在一个类别中。 – dendimiiii

+0

这真的很聪明的方法,谢谢:) –