角度注入$ http到服务

时间:2017-04-14 14:07:30

标签: javascript angularjs

我使用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

3 个答案:

答案 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,让它对您来说更加安全。希望这有帮助!