HttpRequest
HttpInterceptor
kullanarak önbelleğe alma işlemlerini açısal 4.3'e göre gerçekleştirmeye çalışıyorum. Ama bir hata alıyorum.HttpInterceptor'ı açısal olarak kullanarak önbelleğe alma mümkün değil.
caching.interceptor.ts http isteği/yanıt için bir engelleyici olarak burada CachingInterceptor
eser
import { HttpRequest, HttpResponse, HttpInterceptor, HttpHandler, HttpEvent } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/observable/of';
abstract class HttpCache {
abstract get(req: HttpRequest<any>): HttpResponse<any>|null;
abstract put(req: HttpRequest<any>, resp: HttpResponse<any>): void;
}
@Injectable()
export class CachingInterceptor implements HttpInterceptor {
constructor(private cache: HttpCache) {}
intercept(req: HttpRequest<any>, next: HttpHandler) : Observable<HttpEvent<any>> {
if(req.method !== 'GET'){
return next.handle(req);
}
const cachedResponse = this.cache.get(req);
if(cachedResponse){
return Observable.of(cachedResponse);
}
return next.handle(req).do(event => {
if(event instanceof HttpResponse){
this.cache.put(req, event);
}
})
}
}
: İşte benim kodudur. Ve modül oluşturduk benziyor ki: a
Token da [] modülünün sağlayıcıları sağlanan
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component/app.component';
import { HomePage } from './pages/home.page/home.page';
import { ProductsPage } from './pages/products.page/products.page';
import { AboutUsPage } from './pages/about-us.page/about-us.page';
import { UsersPage } from './pages/users.page/users.page';
import { DemoPage } from './pages/demo.page/demo.page';
import { appRouter } from './app.router/app.router';
import { CachingInterceptor } from './caching.interceptor/caching.interceptor';
import { AppService } from './app.service/app.service';
@NgModule({
imports: [ BrowserModule, HttpClientModule, appRouter ],
declarations: [ AppComponent, HomePage, ProductsPage, DemoPage, AboutUsPage, UsersPage ],
providers: [ {
provide: HTTP_INTERCEPTORS,
useClass: CachingInterceptor,
multi: true
}, AppService ],
bootstrap: [ AppComponent ]
})
export class AppModule {}
app.module.ts. Bu belgelere göre açısal 4.3. Ama yine ben alıyorum hata gibi: Bir hizmeti gibi enjekte neden
HttpCache
sonra, soyut bir sınıftır:hata
ERROR Error: Uncaught (in promise): Error: No provider for HttpCache! Error: No provider for HttpCache! at injectionError (reflective_errors.ts:71)
ben 2 soru var?
- Resmi belgelere göre uygulamam olmasına rağmen neden bu hatayı alıyorum? Ben Sorununuzu Söyleyebileceğim kadarıyla
Çok istekte bulunan bir hatayı düzeltmek için cevabımı güncelledim, bir göz atın. –
teşekkürler @WillShaver – Shree