angular.js将函数注入工厂

时间:2013-12-02 20:22:34

标签: javascript angularjs

我有一个功能

function propValueFilter (toFilterArr, filterFunction) {
    return toFilterArr.filter(filterFunction);
};

和工厂

backpackrApp.factory('itemsFactory', function(propValueFilter) {

    factory.getBackpackById = function(id) {
    return backpacks.propValueFilter(function(element) {
        return element.id == id;
    });
};
return factory;
});

我在Web控制台中的组件$ injector中收到了一个未知的提供程序错误。

如何正确注入功能?我想创建一组Helper函数,我可以在许多控制器/ factorys等中使用。

先谢谢

3 个答案:

答案 0 :(得分:1)

您应该将此函数包装在另一个服务/工厂(在下面的示例中名为filterService)并将其注入项目工厂,例如:

backpackrApp.factory('itemsFactory', ['filterService', function(filterService) {

factory.getBackpackById = function(id) {
return backpacks.propValueFilter(function(element) {
    return element.id == id;
});
};
return factory;
}]);

答案 1 :(得分:0)

第一个函数返回时

间距问题?应该是:

function propValueFilter (toFilterArr, filterFunction) {
    return toFilterArr.filter(filterFunction);
};

答案 2 :(得分:0)

我认为你想要创建一个辅助函数,你可以从工厂注入它们(假设你知道你在使用Array.filter做什么):

backpackrApp.factory('myUtil', function() {
    var obj = {
        obj.propValueFilter = function(toFilterArr, filterFunction) {
            return toFilterArr.filter(filterFunction);
        };
    };
    return obj;
});

backpackrApp.factory('itemsFactory', function(myUtil) {
    var itemsFactoryObj = {
        backpacks = []; // set somewhere
        obj.getBackpackById = function(backpacks, id) {
            return myUtil.propValueFilter(function(element) {
                return element.id == id;
            });
        };
    };
    return itemsFactoryObj;
});

backpackrApp.controller('TestCtrl', function(itemsFactory) {
    $scope.backpack = itemsFactory.getBackpackById(1);
});