我試了5分鐘Anuglar2教程,當它說你可以使用外部模板我試過了。Angular2它們如何保存到緩存?
我的組件看起來像這樣
import {Component, Template, bootstrap} from 'angular2/angular2';
// Annotation section
@Component({
selector: 'my-app'
})
@Template({
url: "component.html"
})
// Component controller
class MyAppComponent {
constructor() {
this.name = 'Alice';
}
}
bootstrap(MyAppComponent);
我在外部模板裏有一個錯誤,並修復它,但HTML文件仍緩存,所以我不能在瀏覽器中的效果。
搞清楚他們如何緩存它,我看了看代碼上Github
我發現這個
#angular/modules/angular2/src/core/compiler/template_loader.js
@Injectable()
export class TemplateLoader {
_xhr: XHR;
_htmlCache: StringMap;
_baseUrls: Map<Type, string>;
_urlCache: Map<Type, string>;
_urlResolver: UrlResolver;
constructor(xhr: XHR, urlResolver: UrlResolver) {
this._xhr = xhr;
this._urlResolver = urlResolver;
this._htmlCache = StringMapWrapper.create();
this._baseUrls = MapWrapper.create();
this._urlCache = MapWrapper.create();
}
// TODO(vicb): union type: return an Element or a Promise<Element>
load(template: Template) {
if (isPresent(template.inline)) {
return DOM.createTemplate(template.inline);
}
if (isPresent(template.url)) {
var url = this.getTemplateUrl(template);
var promise = StringMapWrapper.get(this._htmlCache, url);
if (isBlank(promise)) {
promise = this._xhr.get(url).then(function (html) {
var template = DOM.createTemplate(html);
return template;
});
StringMapWrapper.set(this._htmlCache, url, promise);
}
return promise;
}
所以我檢查了StringMapWrapper 角/模塊/ angular2/src目錄/門面/集。 ES6
和集代碼只是
static set(map, key, value) {
map[key] = value;
}
我看到StringMapWrapper來自全球
export var StringMap = global.Object;
但看在角/模塊/ angular2/src目錄/門面/ lang.es6我無法揣摩出的地圖緩存。
我對緩存過程知之甚少,希望有人能解釋在這種情況下他們是如何做到的。
當您告訴瀏覽器清除緩存並重新加載,它是否工作?另外,您使用的是什麼HTTP服務器,以及HTTP響應中的標題是什麼? – unobf 2015-04-03 14:41:44
是的,我清除緩存時有效。我只想知道它是如何到達緩存的。我似乎沒有找到它在代碼中發生的地方。 – 2015-04-03 14:52:16
如果您使用的是Chrome,請轉至開發工具並設置「禁用緩存,同時開發工具已打開」設置,這是否會導致緩存被禁用? – unobf 2015-04-03 15:41:16