繁体   English   中英

角度注入$ http服务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM