簡體   English   中英

延遲角度控制器直到Ajax調用完成

[英]Deferring angular controllers until Ajax call is completed

首先,我用Google搜索並搜索了這個問題。 我見過的所有答案都不能讓我滿意。 我知道解決方案和手動啟動角度,對我們來說都不是很好的解決方案。

基本上我們的應用程序是這樣構建的,在頂層,我們有一個

<body ng-controller="applicationController">

實例化一堆東西。 部分原因是從我們的服務器獲取一些數據並進行設置,以便子控制器可以訪問它。 因此,問題有時是在服務器響應之前執行子控制器。

我們使用角度UI的ui-router,這樣我們就可以利用狀態。 然而,對於我們來說,解決方案並不是一個很好的解決方案,因為我們有一堆路由,用戶可以從任何一個進入應用程序。 到目前為止,我唯一的解決方案是創建一個非常高級的父狀態並對此做出決心,或者解決多個狀態。 有沒有辦法在角度控制器運行之前進行ajax調用?

ng-include( http://docs.angularjs.org/api/ng.directive:ngInclude )怎么樣? 從html文件中刪除所有子控制器內容並將其放在模板文件中。 現在您可以從服務器加載一些數據,如果它們都已到達,則設置ng-include src。

使用此解決方案,您還可以在加載階段顯示另一個模板文件。

如果您不希望將內容放在另一個文件中,您可以考慮編寫一個可以處理內聯模板的指令:

<script type="text/ng-template" id="my-awesome-content.html">
   ... 
</script>

如果你想延遲控制器的實例化,你需要在某些時候利用promises$routeProvider

Misko Hevery (AngularJS的創建者)在這里回答了這樣的問題: 延遲AngularJS路線改變直到模型加載以防止閃爍

他更新了“AngularJS入門教程”以符合該模式; 值得一讀。

幾個月前我遇到了同樣的問題; 我構建了我的應用程序以遵循該原則。

基本上在應用程序中設置一個url /入口點,用於解析控制器的實例化。

如果您的應用可以從其他位置訪問,請將呼叫重定向到該入口點/網址; 解析初始化后,重定向到請求的URL。

我在這里贊成了兩個答案,因為在我看來,最優雅的解決方案是兩者的結合(沒有來回重定向)。 這個問題的核心是angular只允許通過路由提供程序對控制器參數進行同步依賴注入。 然而,我們可以將所有初始化包裝在一個服務中,讓我們的主控制器依賴於此。

查看此plunker進行現場演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM