2015-02-06 67 views
0

由於我公司的網站原本是開發的(ASP .NET w/ascx頁面和代碼隱藏),我不得不使用Angular的手動引導來獲得2個Angular應用程序同一頁。 1在任何給定時間的應用程序控制用戶與主交互的主視口(這是應用程序的主體),而另一個應用程序只是用於控制頁面頂部的頁眉的簡單窗口。在AngularJS應用程序中使用DI時出現奇怪的行爲

由於我希望網站的這兩個區域都使用Angular,我不得不使用manual bootstrapping來將Header應用程序引導到頁面。

直到最近,我都需要這兩個頁面部分才能在同一個工廠上工作,即我想在報頭應用程序以及主應用程序中顯示警報。當我試圖做到這一點時,我注意到工廠的兩個實例正在被實例化。我可以從一端修改變量,而不會從另一端持續。

我的猜測是,手動引導標題應用程序會導致2個應用程序「斷開連接」,因此會導致我注意到的行爲。

聽起來不錯?或者我可能只是在做一些不正確的事情?

TL; DR

可以在2個AngularJS應用程序共享同一角度工廠單身還是他們每個實例自己?我的猜測是,ngApp和angular.bootstrap都實例化了根$rootScope,並且所有子實體都從它們繼承。因此,如果您將2個應用程序和2個$rootScope s嘗試將DOM事件添加到1上,則不會成功傳播到另一個

回答

0

正確。每個應用程序創建一個噴油器實例,並且每個噴油器實例都創建它自己的服務實例。

下面是一個簡單的例證:

angular.module("foo", []) 
    .factory("fooSvc", function(){ 
    return { val: Math.random() }; 
    }); 

angular.module('app1', ["foo"]) 
    .controller('App1Ctrl1', function($scope, fooSvc) { 
    $scope.val = fooSvc.val; // 0.9966537940781564 
    }); 

angular.module('app2', ["foo"]) 
    .controller('App1Ctrl2', function($scope, fooSvc) { 
    $scope.val = fooSvc.val; // 0.6884669279679656 
    }); 
+0

等待..所以整個模塊,你甚至不能共享服務?你不能在同一個應用程序中使用同一個服務的多個模塊嗎? – 2015-02-06 16:56:22

+0

是的,但是,在*相同的應用*內。注入器是在應用程序的上下文中創建的。 「foo」服務的模塊無關緊要。有[某些方法](http://stackoverflow.com/a/16725874/968155)創建可共享的服務,但您確實需要考慮爲什麼您有兩個應用程序並行運行。 – 2015-02-06 17:45:10

+0

@MattHintzke,答案是否解決了你的問題? – 2015-02-09 14:51:40

相關問題