第一项服务总是未知

时间:2016-01-26 19:07:18

标签: angularjs ionic-framework

无论哪个工厂首先列出,都会收到此错误:

Uncaught Error: [$injector:unpr] Unknown provider: SocketProvider <- Socket

ionic.bundle.js:13380

Error: [$injector:unpr] Unknown provider: CommandsProvider <- Commands <- Command

ionic.bundle.js:25642

如果将它放在一个像启动器一样的文件中,它们工作正常,但该组织非常糟糕,这就是我使用常规Angular应用程序的方式。

INDEX:

<script src="app.js"></script>
<script src="services/socket.service.js"></script>
<script src="services/commands.service.js"></script>
<script src="controllers/connect.controller.js"></script>
<script src="controllers/command.controller.js"></script>

服务结构:

socket.service.js

(function(){
  'use strict';

  angular.module('tacoCorp.services', [])
    .factory('Socket', Socket);

  Socket.$inject = ['socketFactory'];

  function Socket(socketFactory) {
    // do factory stuff
  }
}());

commands.service.js

(function(){
  'use strict';

  angular.module('tacoCorp.services', [])
    .factory('Commands', Commands);

  Commands.$inject = [];

  function Commands() {
    // more factory stuff
  }
}());

控制器结构:

(function (){
  'use strict';

  angular.module('tacoCorp.controllers')
    .controller('Command', Command);

  Command.$inject = ['$scope', 'Socket', 'Commands'];

  function Command($scope, Socket, Commands) {
    // controller jamz  
  }

})();

1 个答案:

答案 0 :(得分:2)

您实际上定义了模块'tacaCorp.services'两次,这就是为什么第一个模块被覆盖...

您应该在另一个文件中编写模块定义,然后在服务js文件中获取它...

(function(){
  'use strict';

  angular.module('tacoCorp.services', []);

}());

如您所见,我们定义了没有依赖关系的模块。接下来获取模块并在其上添加您的服务。

(function(){
  'use strict';

  angular.module('tacoCorp.services')
    .factory('Commands', Commands);

  Commands.$inject = [];

  function Commands() {
    // more factory stuff
  }
}());

正如您所看到的获取模块一样,您只需要调用angular.module('tacoCorp.services'),如果您添加第二个参数然后设置它而不是获取它,实际上这是您的错误。