Javascript 将$http注入服务
我使用inject将$http注入工厂。以下是我的代码:Javascript 将$http注入服务,javascript,angularjs,Javascript,Angularjs,我使用inject将$http注入工厂。以下是我的代码: 'use strict'; app.factory('myService', myService); function myService () { let service = { myFunc: myFunc, }; return service; } myFunc.$inject = ['$http']; function myFunc ($http) { $http.get('api/data')
'use strict';
app.factory('myService', myService);
function myService () {
let service = {
myFunc: myFunc,
};
return service;
}
myFunc.$inject = ['$http'];
function myFunc ($http) {
$http.get('api/data')
.success((res) => {
return res;
})
.error((e) => {
console.log('error' + e.message);
});
}
但是,当我调用这个函数时,我有一个错误:TypeError:e.get不是一个函数。我错过了什么?谢谢。我想你应该这样试试
app.service('myFuncService', ['$http', function($http) {
// myFunc stuff
}]);
app.factory('myService', ['myFuncService', myService])
function myService(myFuncService) {
let service = {
myFunc: myFuncService,
};
return service;
}
我将按如下方式重新配置您的应用程序:
(function () {
"use strict";
angular.module('app').factory('myService', myService);
myService.$inject = ['$http'];
function myService($http) {
function myFunc () {
$http.get('api/data')
.then(function(success){
return response.data;
}, function (failure){
return failure;
});
}
return {
myFunc: myFunc
}
}
})();
这样做的目的是将您的“myFunc”范围扩展到“myService”工厂中。因此,您可以从控制器调用myFunc,它由return语句确定。基本上,你的问题是理解范围。我还包装了整个工厂是一个小型化的安全。希望这有帮助 将$inject与myService一起使用,而不是与myFunc一起使用。因此,您的最终代码如下所示:
'use strict';
app.factory('myService', myService);
function myService () {
let service = {
myFunc: myFunc,
};
return service;
}
myService.$inject = ['$http']; // replace myFunc with myService
function myFunc ($http) {
$http.get('api/data')
.success((res) => {
return res;
})
.error((e) => {
console.log('error' + e.message);
});
}
$http方法调用返回一个承诺。你所做的只是在没有真正正当理由的情况下用另一个承诺来包装它。这很公平。把它编辑回基本的$http。谢谢,我用你们的方法解决了这个问题