2017-04-14 76 views
0

我用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); 
    }); 
} 

,但是,当我把这个功能我有错误:类型错误:e.get不是一个函数。我错过了什么?谢谢。

回答

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”工厂。所以从你的控制器,你可以调用myFunc(),这是由return语句决定的。基本上,你的问题是理解范围。我还包裹了整个工厂是一个closure,并使其为您安全缩小。希望这可以帮助!

+1

$ http方法调用返回一个承诺。你所做的只是把它包装在另一个承诺中,而不是真正的(好的)理由。 – skubski

+0

不够公平。将其编辑回基本$ http。 –

+0

谢谢,我用你的方式来解决问题 – wld

0

我认为你应该以这种方式尝试

app.service('myFuncService', ['$http', function($http) { 
    // myFunc stuff 
}]); 

app.factory('myService', ['myFuncService', myService]) 

function myService(myFuncService) { 
    let service = { 
     myFunc: myFuncService, 
    }; 
    return service; 
} 
1

使用$ 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); 
    }); 
}