2014-12-01 74 views
0

我有一個控制器(說主控制器)控制主頁,也維護所有事件偵聽器,像$locationChangeSuccess聽AngularJS控制器初始化事件外

我有在引用了幾個控制器使用ng-include包含在主頁中的部分。這包含了一些自定義路由邏輯,可以讓我決定加載哪個部分。這也相應地改變了URL。

我可以使用$locationChangeSuccess事件收聽位置更改。但是,這並不能保證與通過ng-include加載的部分對應的控制器已經被初始化。

我知道我們可以在$scope上使用$viewContentLoaded這部分的控制器。但是,我必須避免將任何事件監聽器放在主控制器之外。有沒有辦法實現這一點?

回答

0

您可以設置一個像$ scope這樣的標誌。$ parent.inited = true;作爲子控制器的第一行,然後在主控制器中$ scope.inited = false;您可以使用手錶檢查該標誌並在完成後調用某些功能,然後在點擊其他子狀態時將其設置爲false等等。

+0

謝謝@Santiago。理想情況下,我想讓子控制器免受任何鍋爐板代碼的影響,例如'$ scope。$ parent.inited = true'。主控制器是否有其他方式檢測到位置更改後的頁面加載已完全完成? – 2014-12-01 21:58:57

+0

你可以從你的子控制器發出和發出事件,並像你從主控制器那樣收聽 – 2014-12-02 14:39:19

+0

我想避免任何事件相關的邏輯進入子控制器。順便說一句,我能弄清楚從主控制器收聽'$ includeContentLoaded'解決了我的問題。 – 2014-12-03 04:13:34