在我的角度应用中,我正在尝试创建dataAdapter
工厂,我可以在开发和发布期间快速切换local adapter
和api adapter
。
我的dataAdapter工厂看起来像这样
myApp.factory('dataAdapter', function($http, $q){
var dataAdapter = new apiAdapter;
//var dataAdapter = new localAdapter;
return dataAdapter;
});
和我的适配器对象(这里是api适配器)看起来像这样。 (这将位于另一个名为apiAdapter.js的文件中)
var apiAdapter = function(){
return {
getData : function(){ $http.get(). ....; }
}
}
现在这对我不起作用,因为apiAdapter
对象中没有$ http。现在,如果我在var apiAdapter = function(){....}
之前移动var dataAdapter = new apiAdapter;
,它就可以了。有没有办法让apiAdapter可以使用角度服务,而无需在工厂内移动它?
我希望,我能够清楚地描述我的问题。
答案 0 :(得分:3)
我真的没有看到分享这些小功能的重点,所以在我看来它应该看起来像
myApp.factory('dataAdapter', function($http, $q){
return {
getData : function(){ $http.get(). ....; }
}
});
但如果你出于某种原因必须这样做
myApp.factory('dataAdapter', function($http, $q){
var dataAdapter = new apiAdapter($http);
//var dataAdapter = new localAdapter;
return dataAdapter;
});
var apiAdapter = function(http){//
return {
getData : function(){ http.get(). ....; }
}
}
答案 1 :(得分:1)
无论你这样做的原因是什么,这都是它通常以最简单的方式完成的:
var $injector = angular.injector(['ng']);
var apiAdapter = $injectorfunction(){
return {
getData : function(){
$injector.invoke(function($http){
$http.get();
});
}
}
}