在推送

时间:2015-08-07 17:07:00

标签: angularjs wordpress

我使用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

我该怎么办?

1 个答案:

答案 0 :(得分:4)

我认为在javascript中清空数组的首选方法是将其长度设置为0:$scope.selected.length = 0

您在join()上收到错误的原因是您现在将$scope.selected直接设置为不属于数组的类别。这将解决这个问题: $scope.selected = [category];

当然,您只需要其中一种方法。要么是空的,要么是推,要么是直接分配。此外,如果您计划完全摆脱多重过滤器功能,从长远来看,将其存储为类别而不是数组可能会更好。