page navigationend change angular angular-httpclient

navigationend - router events subscribe angular 4



Angular 4 Error: No hay proveedor para HttpClient (3)

Estoy iniciando un nuevo proyecto angular con el CLI y me estoy encontrando con un proveedor que no HttpClient error HttpClient .

He agregado HttpClientModule a mis importaciones de módulos, que parece ser el culpable habitual en este escenario. No encuentro mucho en línea aparte de eso, así que no estoy seguro de cuál es el problema.

mi app.module.ts

@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, HttpClientModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }

y mi servicio

@Injectable() export class FlexSearchService { constructor(private http: HttpClient) {} getSavedSearchResult(index: string, queryName: string, query: string ): Observable<any> { const url = `${environment.flexUrl}/${index}/search`; const item = new SearchQuery({queryName: queryName, variables: {q: query}}); return this.http.post(url, item); } }

y la versión ng da el siguiente resultado

@angular/cli: 1.4.2 node: 6.9.4 os: darwin x64 @angular/animations: 4.4.4 @angular/common: 4.4.4 @angular/compiler: 4.4.4 @angular/core: 4.4.4 @angular/forms: 4.4.4 @angular/http: 4.4.4 @angular/platform-browser: 4.4.4 @angular/platform-browser-dynamic: 4.4.4 @angular/router: 4.4.4 @angular/cli: 1.4.2 @angular/compiler-cli: 4.4.4 @angular/language-service: 4.4.4 typescript: 2.3.4

mi tsconfig

{ "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es5", "typeRoots": [ "node_modules/@types" ], "lib": [ "es2017", "dom" ] } }

Mi prueba

import { TestBed, inject } from ''@angular/core/testing''; import { HttpClientModule } from ''@angular/common/http''; import { FlexSearchService } from ''./flex-search.service''; describe(''FlexSearchService'', () => { beforeEach(() => { TestBed.configureTestingModule({ providers: [FlexSearchService, HttpClientModule] }); }); it(''should be created'', inject([FlexSearchService], (service: FlexSearchService) => { expect(service).toBeTruthy(); }));

¡Cualquier ayuda es muy apreciada!


En tu prueba

TestBed.configureTestingModule({ providers: [FlexSearchService, HttpClientModule] });

Debería ser

TestBed.configureTestingModule({ imports: [HttpClientModule], providers: [FlexSearchService] });


Importar HttpClientTestingModule.

En tu prueba:

import { HttpClientTestingModule } from ''@angular/common/http/testing'';

y en el configureTestingModule de su prueba, haga lo siguiente:

TestBed.configureTestingModule({ imports: [ HttpClientTestingModule ], }) .compileComponents();


Una forma más fácil es proporcionarlo globalmente ... Importe lo siguiente en app.module.ts así:

import { HttpModule } from ''@angular/http'' import { HttpClient, HttpClientModule } from ''@angular/common/http'';

y declararlo en importaciones:

imports: [ HttpModule, HttpClientModule, ... ]