2017-10-10 27 views
0

在AngularJS中,您可以將外部模板作爲腳本標記或Web服務器上的html文件提供。但是我需要實現一個檢索這些模板的自定義邏輯,而且這些方法都不適合。所以我想我可以重寫AngularJS的一部分,其中模板實際上是從服務器加載的。但事實證明,很難找到關於此的任何信息。我發現$TemplateRequestProvider用於這項任務,但我不知道如何用自定義邏輯代替它。你能幫我嗎?實現加載AngularJS模板的自定義方式

回答

1

我不完全確定你想要實現什麼,因爲實際上$ templateRequestProvider 確實爲提供了檢索指向它們的給定URL的模板。在引擎蓋下,當需要位於遠程源的模板時,提供者首先運行其內部緩存,並且如果請求的模板不可用,則獲取它。如果響應成功,則響應主體(HTML內容)將存儲並索引到內部存儲/緩存中。現在,在資源服務器需要額外的數據集出現在請求中的情況下,例如標頭/ cookie,強制請求參數,授權令牌等等,那麼確實,您檢索這些模板的請求需要更復雜。話雖如此,我想你真正感興趣的是能夠在發送之前處理請求,而不是重寫(提取+緩存)邏輯,這已由angular開發者創作。

儘管如此,如果有實際需要,並且有自己定製的機制來處理請求,您可以在角度應用程序的生命週期的配置階段訪問該提供程序。要做到這一點,使用鏈接的配置你的應用程序的模塊上這樣說:

app.config(['$templateRequestProvider', function ($templateRequestProvider) { 
    $templateRequestProvider.$get = ['$templateCache', '$http', '$q','$sce', ƒunction ($templateCache, $http, $q, $sce) { 
     var getRemoteTemplateByUrlFn = function (tplUrl, ignoreRequestError) { 
      // here be dragons 
      return $http.get ... ; 
     }; 

     return getRemoteTemplateByUrlFn; 
    }]; 
}]). ... 

現在,要實現這個階段之前,我建議你有一個更好的文檔爲$ templateRequestProvider從露出學習開$將配置對象提供給提供者的函數,它還公開了httpOptions(...)函數,您可以調用它傳遞一個httpOptions對象,其中包含一系列頭文件等,以包含在請求獲取遠程模板的請求中。另外,說到模板緩存和按需提取,讓我向您介紹ocLazyLoad庫(如果您還沒有遇到它)。我正在利用它來在需要時延遲加載頁面源(例如,點擊按鈕時模態窗口模板和控制器)。在它的強大功能:

  • 依賴自動加載
  • 調試友好(無EVAL代碼)
  • 按需
  • 負載通過服務或指令混合正常開機和負載能力
  • 使用內嵌式異步加載或使用您自己(requireJS,...)
  • 加載JS(角與否)/ CSS /模板文件

玩得開心!

相關問題