[英]angular inject $http to service
我使用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不是函数。 我错过了什么? 谢谢。
将$ 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);
});
}
我想你应该这样
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”工厂的作用。 因此,可以从控制器中调用由return语句确定的myFunc()。 基本上,您的问题是了解范围。 我还把整个工厂都包装成一个封闭的容器,并使其缩小对您来说很安全。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.