2015-12-22 58 views
3

在Angular 1中,我們使用$ templateCache作爲一種避免在引導我們的應用程序時從服務器上下載每個模板的XHR的方法。在Angular 2中,似乎沒有預先建立這樣的機制。

什麼我能做的就是在編譯器替換XHR:

function myXhr() {}; 
myXhr.prototype.get = function(url) { 
    return new Promise(function(resolve, reject) { 
     $.ajax({ 
      url:url, 
      method:'GET', 
      success:resolve, 
      error:reject 
     }); 
    }); 
}; 

ng.platform.browser.bootstrap(MyApp, [ 
    ng.core.provide(ng.compiler.XHR, {useClass:myXhr}) 
]); 

,然後調整我XHR吸氣首先檢查本地緩存。這是首選方法嗎?

+1

似乎是http://stackoverflow.com/questions/34418914/alternatives-to-templatecache-in-的副本angular2,雖然在同一天被問到,但還沒有解決。 –

+0

仍然沒有很好的解決方案,只是很多handwaving。 – superluminary

回答

2

在Angular2高速緩存的工作原理如下:

  • 應用層:上ViewContainerRef方法被調用(例如ViewContainerRef.createComponent)。

  • reflector.registerType註冊組件類型作爲註釋

  • ComponentResolver.resolveComponent現在在角2.0返回一個無極

初始設計前的類型註釋返回ComponentFactory

  • ComponentResolver.resolveComponent首先檢查Alpha:

    ProtoView是一個原型視圖,它是模板編譯的結果,由Angular根據編譯的模板有效地創建此視圖的實例。

    RenderProtoViewRef是應用程序上下文中可用的ProtoViewRef的對應物。但與ProtoViewRef不同,RenderProtoViewRef包含所有靜態嵌套的Proto Views,這些Proto Views被遞歸地合併到一個Render Proto View中。

    不再可能實現ng-include。編譯器需要一個ComponentDirective來編譯HTML。因此,您無法自行編譯HTML,並將其包含到View中。由於初始角2.0測試

    相關變化:

    編譯器被重命名爲ComponentResolver,Compiler.compileInHost已更名爲ComponentResolver.resolveComponent。

    渲染器接口,現在運行在平原籍節點,而不是RenderElementRefs或RenderViewRefs

    AppViewManager改名入ViewUtils,是一個純粹的私營公用事業服務。

    參考

  • 3

    我已經習慣了使用模板字符串打字稿我的所有組件。我發現有一個TS文件中的HTML和查看邏輯非常方便。 您還可以查看模塊加載器/打包程序,如JSPMWebPack。這些偉大的構建工具拉在所有的模板到您的構建模塊使用的語法象下面這樣:

    let html = require('./about.html!text'); 
        @Component({ 
         selector:"my-about", 
         template:html 
        }) 
    
    +0

    正是我正在尋找的,我不需要使用絕對路徑來模板。現在如果只有一種方法可以將它轉換爲es6導入語法?謝謝。 –