【发布时间】:2015-11-23 11:54:28
【问题描述】:
我有一个根据类别过滤的大型产品对象。选择过滤器后,我拥有的 getAllProducts() 函数将使用该过滤器调用。这个函数还设置了$scope.products,在我看来,ng-repeat 是<li>。
选择每个类别后,我在控制台记录返回的产品对象的长度,并看到该对象正确更新,但我的视图没有改变。有人看到这里出了什么问题吗?
查看:
<li ng-repeat="product in products track by $index">
<img ng-model="category" class="{{product.custom.category_code}}" src="/img/product-all/{{product.custom.sku}}PF1.png">
<p class="name">{{product.custom.name1}}</p>
<p class="price">{{product.price}}</p>
</li>
<li class='has-sub first-menu'><a href='/scroll'><span>Filter By Category:</span></a>
<ul class="sub-menu">
<li ng-repeat="cat in filterCategory">
<a href='/scroll' data-category="all" ng-click="setFilter('category', cat)">
<span>{{cat}}</span>
</a>
</li>
</ul>
</li>
<li class='has-sub first-menu'><a href='/scroll'><span>Filter By Color:</span></a>
<ul class="sub-menu">
<li ng-repeat="color in filterColor">
<a href='/scroll' data-category="all" ng-click="setFilter('color', color)">
<span>{{color}}</span>
</a>
</li>
</ul>
</li>
<li class='has-sub first-menu'><a href='/scroll'><span>Filter By Season:</span></a>
<ul class="sub-menu">
<li ng-repeat="season in filterSeason">
<a href='/scroll' data-category="all" ng-click="setFilter('season', season)">
<span>{{season}}</span>
</a>
</li>
</ul>
</li>
控制器:
$scope.setFilter = function(type, filter){
type = type;
filter = filter;
getProducts(type, filter);
}
var getProducts = function(type, filter){
productFactory.getAllProducts()
.then(function(){
$timeout( function(){
var allProducts = productFactory.products;
var filterProducts;
switch (type){
case "category":
filterProducts = $filter('filter')(allProducts, {custom:{category_code:filter}});
break;
case "color":
filterProducts = $filter('filter')(allProducts, {custom:{color_code:filter}});
break;
case "season":
filterProducts = $filter('filter')(allProducts, {custom:{season:filter}});
break;
default:
filterProducts = productFactory.products;
}
$scope.products = _.uniq(filterProducts, function(p){ return p.custom.sku; });
console.log($scope.products.length);
}, 700);
});
}
工厂:
var getAllProducts = function(){
return $http.get('/api/scroll?page='+pageNumber)
.then(function(response) {
angular.extend(products,response);
for (var i = products.data.results.length - 1; i >= 0; i--) {
productsData.push(products.data.results[i]);
};
while (pageNumber <= products.data.pages){
getAllProducts();
pageNumber++;
}
for (var i = productsData.length - 1; i >= 0; i--) {
if (filterCategory.indexOf(productsData[i].custom.category_code) == -1) {
filterCategory.push(productsData[i].custom.category_code);
};
if (filterColor.indexOf(productsData[i].custom.color_code) == -1) {
filterColor.push(productsData[i].custom.color_code);
// $filter('orderBy')(filterColor, '+');
};
if (filterSeason.indexOf(productsData[i].custom.season) == -1) {
filterSeason.push(productsData[i].custom.season);
};
};
var deferred = $q.defer();
deferred.resolve(response);
products = productsData;
return deferred.promise;
});
};
【问题讨论】:
-
你能添加你的
getAllProducts工厂方法代码吗? -
您是否尝试删除
track by $index? -
@bumpy 是的,没有改变任何东西
-
@PankajParkar 刚刚添加
标签: javascript angularjs scope angularjs-scope