Javascript 将$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')

我使用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')
    .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。谢谢,我用你们的方法解决了这个问题