Почему инъекция не работает в дочернем классе? - PullRequest
0 голосов
/ 27 мая 2020

У меня один класс:

@Injectable({
    providedIn: 'root',
})
export class Services {
    public Service1 = new Service1();
}

Service1 весь класс:

import { HttpRequests } from './http';
import { RepositoryModel } from './repository';
import { HttpClient } from '@angular/common/http';
    export class Service1 {
        public http: HttpRequests;
        public repositoryModel: RepositoryModel;

        constructor(private httpClient?: HttpClient) {
            console.log(httpClient);
            this.repositoryModel = new RepositoryModel();
            this.http = new HttpRequests(this.httpClient, this.repositoryModel);
        }
    }

Почему я получаю undefined на линии: console.log(httpClient); хотя у меня есть httpClientModule в app.module?

Использование:

 constructor(private services: Services) {}

1 Ответ

1 голос
/ 27 мая 2020

, потому что вы создаете Service1 конструктором, а не созданием bean-компонента. У вас есть 2 решения. Вставить HttpClient в Service1 подрядчиком из Service:

@Injectable({
providedIn: 'root',
})
export class Services {

    private service1: Service1;

    constructor(private httpClient?: HttpClient){
        this.service1 = new Service1(this.httpClient);
    }
}

или изменить Service1 как bean

@Injectable({
    providedIn: 'root',
})
export class Services {

constructor(private service1: Service1) {
    }
}


import { HttpRequests } from './http';
import { RepositoryModel } from './repository';
import { HttpClient } from '@angular/common/http';

@Injectable({
    providedIn: 'root',
})
export class Service1 {
public http: HttpRequests;
public repositoryModel: RepositoryModel;

constructor(private httpClient?: HttpClient) {
    console.log(httpClient);
    this.repositoryModel = new RepositoryModel();
    this.http = new HttpRequests(this.httpClient, this.repositoryModel);
    }
}
...