无论哪个工厂首先列出,总是会出现此错误:
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 应用程序的做法。
索引:
<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
}
}());
Controller 结构:
(function (){
'use strict';
angular.module('tacoCorp.controllers')
.controller('Command', Command);
Command.$inject = ['$scope', 'Socket', 'Commands'];
function Command($scope, Socket, Commands) {
// controller jamz
}
})();
最佳答案
您实际上定义了模块'tacaCorp.services'
两次,这就是第一个模块被覆盖的原因......
您应该在另一个文件中编写模块定义,然后在 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')
,如果您添加第二个参数,然后设置它而不是获取它,这实际上是你的错误。
关于angularjs - 第一个服务总是以未知的形式出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35021825/