简体   繁体   English

angular.js将函数注入工厂

[英]angular.js inject function into factory

i have a function 我有一个功能

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

and a factory 和一家工厂

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

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

I am getting a Unknown Provider error in component $injector in the Webconsole. 我在Webconsole中的$ injector组件中收到未知提供程序错误。

How to inject a function right? 如何注入功能呢? I want to create a set of Helper functions which i can use in many controllers / factorys etc. 我想创建一组可以在许多控制器/工厂等中使用的Helper函数。

Thanks in Advance 提前致谢

You should wrap this function in another service/factory (named filterService in example below) and inject that into the items factory, like: 您应该将此函数包装在另一个服务/工厂中(在下面的示例中命名为filterService),并将其注入到item工厂中,例如:

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

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

Spacing issue in the return of the 1st function? 返回第一个函数的间距问题 Should be: 应该:

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

I think you want to create helper functions you can inject them from a factory (assuming you know what you're doing with Array.filter): 我认为您想创建辅助函数,可以将它们从工厂注入(假设您知道使用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);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM