2014-02-06 84 views
6

比方說,我有一個叫做應用程序模塊中注入其它兩個模塊調用者之間分享廠工廠控制器AngularJS:多個模塊

var app = angular.module("app", ["factories", "controllers", "directives"]) 
.run(function ($rootScope, userFactory) { 
    userFactory.property = "someKickstartValue"; 
}); 

工廠模塊包含所有工廠:

var factories = angular.module("factories", []), 
factory = factories.factory("testFactory", { 
    property: "someValue" 
}); 

控制器模塊容納所有控制器:

var controllers = angular.module("controllers", ["factories"]), 
controller = controllers.controller("controller", function ($scope, testFactory) { 
    console.log(testFactory.property); // Returns "Some Value" and not 
             // "someKickstartValue" as expected. 
}); 

實際的問題:

爲什麼出現 「someKickstartValue」 不適用於控制器?據我瞭解模塊應用程序有它自己的testFactory實例和模塊控制器也有它自己的,所以不能通過工廠模塊之間共享任何信息。有沒有辦法解決,還是我犯了一個錯誤?

+0

在第一行中,啓動'var app'你拼錯了「工廠」 – Mawg

+0

@Mawg謝謝。我改變了它。現在應該是正確的:) – tmuecksch

回答

6

我通過刪除控制器的「工廠」依賴關係來修復它。

var controllers = angular.module("controllers", []), 
controller = controllers.controller("controller", function ($scope, testFactory) { 
    console.log(testFactory.property); // Returns "someKickstartValue" as expected 
}); 

因爲我現在沒有聲明工廠的依賴,在控制器模塊不會創建它是工廠自己的實例,並已獲得其噴射的應用模塊的實例控制器模塊。

+0

你確定這是正確的方法嗎?通過注入應用程序,您注入到該應用程序的所有控制器中。如果只有一些控制器需要「工廠」依賴項,那麼爲什麼不只注入那些控制器,而不是整個應用程序?請注意,我不是Angular guru。 – Mawg

+1

@Mawg在此期間,我已經轉向角度4.所以這在我的腦海裏已經不再新鮮了。但據我記憶,你可能是對的。當你在開場白的第一行刪除「工廠」注射時,試試看會發生什麼。 – tmuecksch

+0

我想自己做開關,但不知道時間是否正確。例如,你知道,如果Angular 4可以使用UI-bootstrap或其他的Angular 1.x的東西嗎? – Mawg

3

我面臨同樣的問題。我解決它以下述方式:

// modules.js 
(function (angular) { 
    angular.module("shared", []); 
    angular.module("user", ["shared"]); 
    angular.module("admin", ["shared"]); 
})(window.angular); 

這種結構允許使用附接至工廠,服務指令共享在其它模塊模塊。