मैं एक कोणीय वेबसाइट एक "जोड़ें" और एक "हटाएँ" प्रपत्र एक ही पृष्ठ पर एक मेज पर डेटा हेरफेर करने के लिए होता है जो बना अपडेट नहीं होता।कोणीय कैश के साथ पेज सक्षम
जब मैंने इसे स्थानीय रूप से या Chrome डेवलपर कंसोल (विकलांग कैश) के साथ परीक्षण, जब मैं एक नया आइटम जोड़ सकते हैं या एक को हटाने, टेबल ही अपने आप ताज़ा। जब मैं उत्पादन सर्वर मेरे मुवक्किल की (आईआईएस सर्वर) पर उसकी जांच, यह केवल के साथ क्रोम देव कंसोल खोला काम करता है। अन्यथा, वे Ctrl + F5 का उपयोग करने के लिए कैश ताज़ा करें और पृष्ठ पर परिवर्तन को दिखाने के लिए है।
यह घटकों पर कोड है:
addProduct() {
this._productsService.addProduct(this.addFormProductItem)
.subscribe(v => {
this._productsService.getProducts().subscribe(
products => {this.products = products, this.onChangeTable(this.config)}
);
});
this.addmodalWindow.hide();
return;
}
onChangeTable(config: any, page: any = {
page: this.page,
itemsPerPage: this.itemsPerPage
}): any {
if (config.filtering) {
Object.assign(this.config.filtering, config.filtering);
}
if (config.sorting) {
Object.assign(this.config.sorting, config.sorting);
}
this.ng2TableData = this.products;
this.length = this.ng2TableData.length;
let filteredData = this.changeFilter(this.ng2TableData, this.config);
let sortedData = this.changeSort(filteredData, this.config);
this.rows = page && config.paging ? this.changePage(page, sortedData) : sortedData;
this.length = sortedData.length;
}
मेरा अनुमान है कि यह या तो कुछ सर्वर विन्यास करने के लिए या webpack कोड से संबंधित है। हालांकि, मैं बाद वाले से परिचित नहीं हूं और मैंने इसे अभी छोड़ दिया क्योंकि यह मेरे द्वारा उपयोग किए जाने वाले शुरुआती पैकेज पर था।
मैं a gist with the webpack बनाई गई है, क्योंकि यह एक लंबे फ़ाइल
संपादित करें 1: कुछ अतिरिक्त अनुसंधान के बाद, मैं अनुप्रयोग के रूट फ़ोल्डर पर एक web.config फ़ाइल पर निम्नलिखित जोड़ने की कोशिश की।
<caching enabled="false" enableKernelCache="false">
<profiles>
<add extension=".css" policy="DontCache" kernelCachePolicy="DontCache" />
<add extension=".html" policy="DontCache" kernelCachePolicy="DontCache" />
<add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" />
</profiles>
</caching>
हालांकि, मैं अब भी वही व्यवहार किया है। देव कंसोल के साथ एक आइटम जोड़ना बंद है, यह तालिका अद्यतन नहीं करता है। लेकिन अगर मैं डेव कंसोल खोला और विकलांग कैश है, तो यह है कि यह एक ताज़ा की आवश्यकता के बिना अद्यतन करता है।
संपादित करें 2: गुप्त विंडो पर कार्य करना समस्या को ठीक नहीं करता है।
संपादित करें 3: index.html पर मेटा टैग जोड़ना फिर से समस्या हल नहीं होती,।
<meta http-equiv="Cache-control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
संपादित 4:
getProducts() {
return this._http.get(this.API + '/products/all')
.map((response: Response) => <Product[]>response.json().products);
}
addProduct(product:Product) {
if (this._loggedInGuard.isLoggedIn()) {
let token = localStorage.getItem('my.token');
let body = JSON.stringify(product);
let headers = new Headers(
{ 'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token});
return this._http
.post(this.API + "/products/store", body, {headers: headers})
.map(res => res.json())
.catch(this._responseService.catchBadResponse)
.do(() => this._responseService.success('Success. You added a product!'));
}
}
संपादित 5
एकमात्र समाधान मैं पा सकते हैं खिड़की हर बार जब मैं location.reload(true)
साथ डेटा पर एक अद्यतन कर फिर से लोड करने के लिए है। लेकिन फिर, यह केवल फ़ायरफ़ॉक्स पर काम करता है, न कि क्रोम पर। और मैं स्वीकार नहीं करूंगा कि आपको यह काम करने के लिए एकल पृष्ठ ऐप रखने का एकमात्र कारण छोड़ना होगा।
क्या आप अपनी सेवा से 'getProducts() 'और' addProduct() 'दिखा सकते हैं। साथ ही, जब आप दो घटक में 'addProduct' को कॉल करते हैं तो क्या होता है? –
प्रश्न अपडेट किया गया ... इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार एक उत्पाद जोड़ता हूं। टेबल तब तक रहता है जब तक मैं देव कंसोल खोलता हूं या कैश साफ़ करता हूं और ताज़ा करता हूं। – Tasos
दोनों अनुरोध निष्पादित किए गए हैं? –