嗯,我会试着解释我为什么要这样做的方法。为简单起见,我修剪了代码。我想创建一个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
考虑将内部与分离范围指示该数据,而不是把它放在一共享控制器的范围。 –
@丹尼贝克:很酷。请记住这一点 –
对于这种特殊情况,您接受的答案可能更合适,但是,是的,隔离范围是“指令A中的数据被指令B中的数据破坏”的一般解决方案“ –