从数组指令中删除重复项

时间:2015-01-08 20:33:41

标签: javascript arrays angularjs angularjs-directive

我有一个名字的div。我想删除我的数组中的重复项。我已经使用filter完成了此操作,但我想知道如何扩展它以构建directive

<div ng-controller="MainController">
        <ul>
            <li ng-repeat="name in names | unique">
                {{name}}
            </li>   
        </ul>
</div>

以下是过滤器代码。

angular.module('app')
    .controller('MainController', ['$scope', function($scope){
        $scope.names = ['a','b','c','d','a','c'];
    }])
    .filter('unique', function(){
        return function(names){
            var obj = {};
            names.forEach(function(name){
                obj[name] = null;
            })
            return Object.keys(obj);
        }
    })
    .directive('unique', function(){
        return {
            link: function(scope, elem, attr){

            }
        }
    })

如何构建一个directive来删除我的数组中的重复项。

1 个答案:

答案 0 :(得分:1)

以下是我的写作方式:

angular.module('app')
    .controller('MainController', ['$scope', function($scope){
        $scope.names = ['a','b','c','d','a','c'];
    }])
    .directive('uniqueArray', function(){
        return {
            restrict: 'E',
            scope: {
                arr: '='
            }
            template: '<ul><li ng-repeat="item in unique_arr">{{item}}</li></ul>',
            controller: function($scope){

                function get_unique(items){
                    var obj = {};
                    angular.forEach(items, function(item){
                        obj[item] = null;
                    });
                    return Object.keys(obj);
                }

                $scope.unique_arr = get_unique($scope.arr);
            }
        }
    })

并在HTML中:

<unique-array arr="names"></unique-array>

我认为指令是不必要的,好像它基本上充当了包装器