[英]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.