angular.js为工厂注入功能

angular.js inject function into factory

本文关键字:注入 功能 工厂 js angular      更新时间:2024-02-06

我有一个函数

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函数,我可以在许多控制器/工厂等中使用。

提前感谢

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

backpackrApp.factory('itemsFactory', ['filterService', function(filterService) {
factory.getBackpackById = function(id) {
return backpacks.propValueFilter(function(element) {
    return element.id == id;
});
};
return factory;
}]);

第一个函数返回中的间距问题?应为:

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

我认为您想要创建可以从工厂注入的辅助函数(假设您知道使用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);
});