2016-09-07 212 views
0

我在我的基本html頁面上加載了一個模塊,名爲userFromServer。我想將它注入主應用模塊和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 
+0

什麼是你所得到的錯誤?還請包含userFromServer模式定義。 –

+0

請提供完整的錯誤信息(包括調用堆棧)和相關模塊的代碼。列出的代碼不包含任何可能導致錯誤的內容(除了沒有userFromServer的事實)。此外,你正在注入與加載混淆。模塊正在被加載*,循環依賴沒有問題。依賴性被注入*。 – estus

+0

@estus使用代碼和堆棧跟蹤進行更新 – user2954587

回答

1

發生這種情況是因爲currentUser服務實例被注入到config塊中。只有服務提供商可以在這裏注入。

由於currentUser是不依賴於其他服務,並在配置階段,它應該提供一個恆定的對象,也可能是constant服務:

angular.module('userFromServer', []) 
    .constant('currentUser', { 
    <% if logged_in %> 
     name: '<%= @User.name %>', 
     first_name: '<%= @User.first_name %>', 
     id: '<%= @User.id %>', 
     uuid: '<%= @User.profile.uuid %>' 
    <% end %> 
    }) 
1

由於父模塊App已經有了userFromServer在它注入,你並不需要再次注射它analytics.mixpanel

+0

實際上,如果兩個模塊都依賴於此模塊,則需要加載它才能保持一致。這就是模塊化的意義所在。模塊可以通過這種方式彼此分開使用或測試。 – estus

+0

@estus父模塊'App'已經列出了'analytics.mixpanel'和'userFromServer',因爲它是依賴關係。因此,不需要再次爲子模塊「analytics.mixpanel」注入'userFromServer'作爲依賴項。 我同意,如果兩個完全獨立的模塊有一個依賴關係,他們可以單獨注入它,但在這裏它們不是*獨立的,而是第一個模塊'App'已經具有第二個模塊'analytics.mixpanel',因爲它是依賴關係。 –

+0

如果'App'直接依賴'userFromServer'並且'analytics.mixpanel'在某個時候從應用中刪除,那麼該應用將停止工作。 Angular允許模塊在幾個地方準確地加載以覆蓋這些情況,這是該框架的一個功能,無需避免這種情況。 – estus