无论哪个工厂首先列出,都会收到此错误:
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
}
})();
答案 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')
,如果您添加第二个参数然后设置它而不是获取它,实际上这是您的错误。