Допустим, у меня есть этот фрагмент кода
<div *appTab routerLink="..." routerLinkActive="..."></div>
Можно ли внедрить экземпляр директивы RouterLinkActive в мою директиву appTab?
Допустим, у меня есть этот фрагмент кода
<div *appTab routerLink="..." routerLinkActive="..."></div>
Можно ли внедрить экземпляр директивы RouterLinkActive в мою директиву appTab?
nullInjectorError: No provider for RouterLinkActive  05.06.2019 RouterLinkActive - правильное имя  05.06.2019 *?  Является ли эта директива структурным шаблоном?  05.06.2019 div будет поднят с @ContentChildren  05.06.2019 <div> будет перемещен компилятором во внутренний шаблон.  Попробуйте удалить *, чтобы посмотреть, работает ли инъекция.  05.06.2019 <div #rla="routerLinkActive" [appTabRouterLinkActive]="rla" ...>, где appTabRouterLinkActive будет свойством @Input в appTab.  05.06.2019 @Input с помощью метода, предложенного в этом ответе.  Возможно, вам также придется внести исправление, предложенное в этом другом ответе.  05.06.2019 Было бы проще, если бы ViewContainerRefs.createEmbeddedView использовал правильный инжектор, но пока мы можем только обходной путь Это.
router-link-active-tab-connector.directive.ts
import { Directive, Input, OnInit } from '@angular/core';
import { TabDirective } from './tab.directive';
import { RouterLinkActive } from '@angular/router';
@Directive({
  selector: '[routerLinkActive][routerLinkActiveTabConnector]'
})
export class RouterLinkActiveLinkerDirective implements OnInit {
  @Input('routerLinkActiveTabConnector') tab: TabDirective;
  constructor(private routerLinkActive: RouterLinkActive) {}
  ngOnInit() {
    this.tab.setRouterLinkActive(this.routerLinkActive);
  }
}
tab.directive.ts
import { Directive, ViewContainerRef, TemplateRef } from '@angular/core';
import { RouterLinkActive } from '@angular/router';
@Directive({
  selector: '[appTab]'
})
export class TabDirective {
  constructor(private vcRef: ViewContainerRef, private templateRef: TemplateRef<any>) { }
  setRouterLinkActive(routerLinkActive: RouterLinkActive) {
    console.log(routerLinkActive);
    // do something with RouterLinkActive directive
  }
  ngOnInit() { 
    this.vcRef.createEmbeddedView(this.templateRef, { $implicit: this});
  }
}
html
<div *appTab="let tabRef" 
  routerLink="..." 
  routerLinkActive="" 
  [routerLinkActiveTabConnector]="tabRef">
   Some content
</div>