角度注入模块分为多个模块

时间:2016-09-07 13:14:40

标签: angularjs

我在名为userFromServer的基础html页面上加载了一个模块。我想将它注入主app模块和mixpanel模块。但是,如果我尝试将userFromServer注入analytics.mixpanelangular 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

2 个答案:

答案 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 %>
  })