Как вы можете получить имя компонента в логике директивы атрибута? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть директива атрибута, которую я буду применять к элементам в моем DOM.Мне было интересно, возможно ли каким-то образом получить имя компонента, которое окружает директиву атрибута в DOM.

Например, учитывая:

<SomeComponent>
    <div myAttributeDirective>
</SomeComponent>

Я хочу получить имя SomeComponent из кода директивы атрибута.

Я знаю, что могу передать что угоднодиректива, но я пытаюсь сделать его как можно более кратким синтаксисом, и надеялся, что есть творческий способ сделать это.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

В итоге я придумал способ сделать это, хотя он может быть хрупким по отношению к будущим версиям Angular.Хитрость заключается в том, чтобы получить доступ к экземпляру компонента из ViewContainerRef в вашей директиве, а затем использовать силу constructor() компонента, чтобы получить имя.

import { Directive, HostListener, ViewContainerRef } from '@angular/core';
@Directive({
    selector: '[yourDirective]'
})
export class yourDirective {
    constructor(private _view: ViewContainerRef) {}
    ngOnInit {
        let component = (<any> this._view)._view.component;
        console.info("Component Name: ", component.constructor.name);
    }
}
0 голосов
/ 05 июня 2018

Нет, это невозможно из тегов компонента.Вы должны передать имя компонента по атрибуту, определенному в TS-файле.

Эта статья посвящена аналогичной теме, но даже здесь вам нужно подготовить переменную внутри TS-файла, который вы затем передадитев качестве атрибута.

Доступ к `селектору` из компонента Angular 2

...