我使用inject
将$http
注入.factory
这是我的代码:
'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不是函数。我错过了什么?感谢' S
答案 0 :(得分:1)
使用$ inject with 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);
});
}
答案 1 :(得分:0)
我认为你应该以这种方式尝试
app.service('myFuncService', ['$http', function($http) {
// myFunc stuff
}]);
app.factory('myService', ['myFuncService', myService])
function myService(myFuncService) {
let service = {
myFunc: myFuncService,
};
return service;
}
答案 2 :(得分:0)
我会按如下方式重新配置您的应用:
(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'工厂。因此,从您的控制器,您可以调用由return语句确定的myFunc()。基本上,您的问题是理解范围。我还把整个工厂包裹起来closure,让它对您来说更加安全。希望这有帮助!