AngularJS – 将工厂从另一个模块注入供应商

前端之家收集整理的这篇文章主要介绍了AngularJS – 将工厂从另一个模块注入供应商前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个单独的模块的工厂,我想注入到我的模块的提供商,但我不断收到未知的提供商错误。我究竟做错了什么?

我想注射什么

  1. var angularSocketIO = angular.module('socketioModule',[]);
  2. angularSocketIO.factory('socketio',[
  3. '$rootScope','addr',function($rootScope,addr) {
  4. var socket = io.connect(addr,{
  5. 'sync disconnect on unload': true
  6. });
  7. ...
  8. return socket;
  9. }
  10. ]);

我试图注射的地方:

  1. angular.module('myApp.services',['socketioModule'])
  2. .provider('greeter',['socketio',function(socket) {
  3. var salutation = 'Hello';
  4. this.setSalutation = function(s) {
  5. salutation = s;
  6. }
  7.  
  8. function Greeter(a) {
  9. this.salutation = salutation;
  10. socket._emit('hello')
  11.  
  12. this.greet = function() {
  13. return salutation + ' ' + a;
  14. }
  15. }
  16.  
  17. this.$get = function(version) {
  18. return new Greeter(version);
  19. };
  20. }]);

结果

  1. Error: [$injector:modulerr] Failed to instantiate module myApp due to:
  2. [$injector:modulerr] Failed to instantiate module myApp.services due to:
  3. [$injector:unpr] Unknown provider: socketio
我认为是因为所有的提供商都在工厂之前实例化,因此提供商只能依赖于其他提供商。

作为一种方式,我正在使用angular.module的注射器方法来创建模块。
一个应该做你想要完成的东西:http://plnkr.co/edit/g1M7BIKJkjSx55gAnuD2

请注意,我也改变了工厂方法。工厂方法现在返回一个对象
使用连接方法

  1. var angularSocketIO = angular.module('socketioModule',['ng']);
  2. angularSocketIO.factory('socketio',function($rootScope) {
  3. return {
  4. connect: function(addr) {
  5. var socket = io.connect(addr,{
  6. 'sync disconnect on unload': true
  7. });
  8.  
  9. return socket;
  10. }
  11. };
  12. }]);
  13.  
  14.  
  15. angular.module('myApp.services',['socketioModule'])
  16. .provider('greeter',[
  17. function() {
  18. var injector = angular.injector(['socketioModule']);
  19. var socketio = injector.get('socketio');
  20.  
  21. var salutation = 'Hello';
  22. this.setSalutation = function(s) {
  23. salutation = s;
  24. }
  25.  
  26. function Greeter(a) {
  27. this.salutation = salutation;
  28. socket._emit('hello');
  29.  
  30. this.greet = function() {
  31. return salutation + ' ' + a;
  32. };
  33. }
  34.  
  35. this.$get = function(version) {
  36. return new Greeter(version);
  37. };
  38. }
  39. ]);
  40.  
  41.  
  42. var myApp = angular.module('myApp',["myApp.services"]);

猜你在找的Angularjs相关文章