Angular 9 компонент доступа в директиве - PullRequest
0 голосов
/ 14 февраля 2020

Я обновил приложение angular 8 до приложения agular 9. В одной из моих директив я получаю доступ к компоненту через атрибут _data viewcontainer. Кажется, этого больше нет в angular 9. Как я могу получить доступ к компоненту в angular 9?

У меня есть несколько входов с viewchild 'errorContainer'. Все они наследуются от Abstractinput. Таким образом, когда у меня есть formcontroll, через директиву я могу помещать ошибки в компоненты.

@Directive({
    selector: '[formControl], [formControlName]'
})
export class DefaultControlErrorDirective implements OnDestroy, OnInit {

    constructor(private vcr: ViewContainerRef) {
      const component = this.vcr['_data'].componentView.component
    }
}

Абстрактный ввод:

@Component({
    template: ``
})
export class InputAbstractComponent implements ControlValueAccessor, OnInit {
    @ViewChild('errorContainer', {read: ViewContainerRef}) errorContainerRef: ViewContainerRef;
}

Реализация абстрактного ввода

@Component({
    selector: 'tg-form-input',
    templateUrl: 'input.html',
    providers: [
        {
            provide: NG_VALUE_ACCESSOR,
            useExisting: forwardRef(() => InputComponent),
            multi: true
        }
    ]
})
export class InputComponent extends InputAbstractComponent implements AfterViewInit {
}

Ввод. html

<div #errorContainer></div>

1 Ответ

0 голосов
/ 14 февраля 2020

просто введите ваш компонент

constructor(myComponent: MyComponent) {
}

, если компонент не всегда один и тот же компонент, вы можете сделать это, предоставив ему некоторый токен

@Component({
providers: [{provide: COMPONENT_FOR_DIRECTIVE_TOKEN, useExisting: AnyComponent}]
})
class AnyComponent {
}
...