我在名为userFromServer
的基础html页面上加载了一个模块。我想将它注入主app模块和mixpanel模块。但是,如果我尝试将userFromServer
注入analytics.mixpanel
(angular mixpanel),我会收到注入错误。这是一个循环依赖错误还是我错过了什么?所有模块都可以userFromServer
吗?如何将userFromServer
注入两个模块?
var app = angular.module('App', ['userFromServer', 'analytics.mixpanel'])
// main app with currentUser injectable
var mixp = angular.module('analytics.mixpanel', ['userFromServer'])
mixp.config(['$mixpanelProvider', 'currentUser', function($mixpanelProvider, currentUser) {
// use currentUser here
}]);
userFromServer模块
<body ng-app="App" ng-cloak>
<base href="/">
<div class="container">
<div ng-view=""></div>
</div>
<script type="text/javascript">
angular.module('userFromServer', [])
.service('currentUser', function() {
<% if logged_in %>
this.name = '<%= @User.name %>';
this.first_name = '<%= @User.first_name %>';
this.id = '<%= @User.id %>';
this.uuid = '<%= @User.profile.uuid %>';
<% end %>
})
</script>
</body>
堆栈跟踪是:
Failed to instantiate module App due to:
Failed to instantiate module analytics.mixpanel due to:
Unknown provider: currentUser
答案 0 :(得分:1)
由于您的父模块App
已注入userFromServer
,因此您无需再次在analytics.mixpanel
中注入它。
答案 1 :(得分:1)
这是因为currentUser
服务实例被注入config
块。这里只能注入服务提供商。
由于currentUser
是一个不依赖于其他服务的常量对象,并且它在配置阶段应该可用,因此它可能是constant
service:
angular.module('userFromServer', [])
.constant('currentUser', {
<% if logged_in %>
name: '<%= @User.name %>',
first_name: '<%= @User.first_name %>',
id: '<%= @User.id %>',
uuid: '<%= @User.profile.uuid %>'
<% end %>
})