Angular - Как передать параметры в базовый класс TypeScript - PullRequest
0 голосов
/ 02 марта 2020

Чтобы использовать внедрение зависимостей в Angular Services / Components / Directive и других структурах, вам нужно Import другие структуры и затем перечислить их в конструкторе.
Например (внедрение службы Title) :

import { Title } from '@angular/platform-browser';

@Component({ ... })
export class AppComponent implements OnInit {
  public constructor(private _titleService: Title) {}

  public ngOnInit(): void {
    this._titleService.setTitle("I'm the Home Page"); // use injected service
  }
}

Теперь я хочу создать семейство polymorphi c с базовым классом и классами накопителей, в которое я добавляю внешние службы в базовый класс, и, кроме того, я хочу передавать параметры из класса накопителей в базовый класс

import { Title } from '@angular/platform-browser';

@Component({ ... })
export class BaseService {
  public constructor(
    private _titleService: Title,
    private _message: string) {
    console.log("Hello, I'm Base class. Message from Drive class: " + _message);
  }
}

@Component({ ... })
export class DriveService extends BaseService {
  public constructor() {
    const message = "Hello from Drive class";
    super(message); // <-- Error, missing parameter!  
  }
}

Я получаю ошибку в DriveService из-за вызова BaseService, потому что я не передаю titleService.
Теперь я не делаю ' не хочу передавать titleService от всех дочерних классов BaseService. Я хочу только импортировать и внедрить titleService один раз в коде BaseService и передать только параметр _message из всех дочерних классов.

Возможно ли это? если так как? или я должен импортировать TitleService и вставлять его в каждый экземпляр моего DriveClass

1 Ответ

0 голосов
/ 02 марта 2020

Вы должны внедрить все зависимости базового класса в классы, расширяющие базовый класс. Кроме того, super должен вызываться первым в конструкторе.

import { Title } from '@angular/platform-browser';

@Component({ ... })
export class BaseService {
  public constructor(
    private _titleService: Title,
    private _message: string) {
    console.log("Hello, I'm Base class. Message from Drive class: " + _message);
  }
}

@Component({ ... })
export class DriveService extends BaseService {
  public constructor(titleService: Title) {
    super(titleService, "Hello from Drive class");
  }
}

Я не учел тот факт, что вы украсили классы с именем xxxService @Component(), просто факт того, как Вы вводите зависимости в базовые классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...