我使用Angularjs收回了一个项目。有一个过滤系统。 实际上,点击类别将此类别添加到列表中。显示所有获得该类别的行业。请注意,单击已选择的类别会删除此类别。
我想点击替换过滤类别,以便每次点击都不会添加类别。我该如何修改这段代码:
$scope.changerCategorie = function(category , name ){
if( jQuery.inArray(category, $scope.selected ) !== -1)
{
angular.forEach($scope.selected , function(obj,index){
if( category == obj ){
$scope.selected.splice(index,1);
$scope.selected_name.splice(index,1);
}
});
}else{
$scope.selected.push(category);
$scope.selected_name.push(name);
}
$scope.selected_filter = $scope.selected.join(', ');
}
我尝试了这个,但它不起作用
$scope.changerCategorie = function(category , name ){
$scope.selected = 0;
$scope.selected_name = 0;
$scope.selected = category;
$scope.selected_name = name;
$scope.selected_filter = $scope.selected.join(', ');
}
我得到了
$scope.selected.join is not a function
如果我删除与selected.join相关的行,则在两次单击后出现另一个错误:
Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: tags in selected_name, Duplicate key: string:l
我该怎么办?
答案 0 :(得分:4)
我认为在javascript中清空数组的首选方法是将其长度设置为0:$scope.selected.length = 0
。
您在join()上收到错误的原因是您现在将$scope.selected
直接设置为不属于数组的类别。这将解决这个问题:
$scope.selected = [category];
当然,您只需要其中一种方法。要么是空的,要么是推,要么是直接分配。此外,如果您计划完全摆脱多重过滤器功能,从长远来看,将其存储为类别而不是数组可能会更好。