Использование Injector для получения служб разрывов SSR, использование преобразователей маршрутов и унаследованных компонентов - PullRequest
0 голосов
/ 05 ноября 2018

Во-первых, мы используем ui-router, а route разрешает ввод данных в компоненты.

У нас есть ряд компонентов, которые наследуются от базового компонента, например,

@Component({
....
})
export class ChildComponent extends BaseComponent{
}

====================

@Component({
....
})
export class BaseComponent implements OnInit, AfterViewInit{

 constructor(serviceOne: ServiceOne, serviceTwo: ServiceTwo) {
 }

}

Ранее в конструкторе базовых компонентов мы вводили ряд сервисов

constructor(serviceOne: ServiceOne, serviceTwo: ServiceTwo) {
}

Это означало, что они должны были передаваться от дочерних компонентов

@Component({
   ....
})
export class ChildComponent extends BaseComponent{

constructor(
    @Inject('dataFromRouteResolver') dataFromRouteResolver,
    serviceOne: ServiceOne, 
    serviceTwo: serviceTwo){
    super(serviceOne, serviceTwo) {

  }
}

Поскольку у нас было большое количество служб и компонентов, происходящих из одного и того же базового компонента, поддерживать его стало немного трудоемким, поэтому после прочтения этого;

https://blogs.msdn.microsoft.com/premier_developer/2018/06/17/angular-how-to-simplify-components-with-typescript-inheritance/

Мы решили реализовать AppInjector и использовать injector.get (ServiceOne) для получения служб, поэтому конструктор базового компонента выглядит следующим образом;

private serviceOne: ServiceOne;
private sericeTwo: ServiceTwo;

constructor(){

 const injector = AppInjector.getInjector();
 this.serviceOne = injector.get(ServiceOne);
 this.serviceTwo = injector.get(ServiceTwo);

}

Это прекрасно работает и действительно очищает наш производный код компонента и операторы импорта, так как нам не нужно ничего передавать конструктору базовых компонентов через super(). Одна загвоздка, угловой универсальный перестал работать. Ничто не отображается в пользовательском интерфейсе для страниц, которые используют этот шаблон. Если я вернусь к использованию старого способа, внедряя все в производный компонент и передавая его базовому компоненту, angular universal снова работает и возвращает весь шаблон.

Я что-то упустил в цикле или порядке, с лебедкой шаблон сначала скомпилирован в angular universal?

Любая помощь приветствуется. Спасибо.

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