【发布时间】:2017-06-27 13:13:42
【问题描述】:
首先,这是这个问题的延伸:Angularjs map array to another array
目前,我有两个作用域:
$scope.products = [
{id: 001, name: "prod 1", ...},
{id: 002, name: "prod 2", ...},
{id: 003, name: "prod 3", ...},
{id: 004, name: "prod 4", ...},
{id: 005, name: "prod 5", ...}
]
$scope.cart = {
products: [001,002]
...
}
$scope.products 包含所有可用产品的列表以及产品信息,而$scope.cart.products 包含添加到购物车的 ID 列表。
上面的答案解释了如何将两个数组合并在一起,但是,我想将它们分开并在两者之间创建一种映射。是否可以?中继器中的自定义过滤器是这里的最佳选择,还是有一种内置的方式来做这个?感谢您的任何建议
编辑
过滤器:
filter('mapProducts', function($filter) {
return function(products, ids) {
var result;
result = [];
$filter('filter')(products, function(p) {
if (ids.indexOf(p.id) !== -1) {
return result.push(p);
}
});
return result;
};
});
在中继器中:
<div ng-repeat="product in products | mapProducts:cart.products">
【问题讨论】:
-
你想如何使用这张地图?是为了 UI 吗?
-
根据您的 UI,为产品转发器创建自定义
isInCard过滤器似乎是合理的。 -
是的,这个想法是,如果有人点击购物车详细信息,它会显示 scope.products 中包含的名称、价格和其他详细信息,同时将 scope.cart.product 保留为地图而不复制scope.products 中已有的相同细节
-
为什么不让
$scope.cart成为$scope.products中对象的引用数组?
标签: javascript angularjs arrays