Я делаю несколько тестов с Angular 2, и у меня есть директива (элемент-макет), которая может применяться ко всем моим компонентам.
Внутри этой директивы я хочу иметь возможность читать некоторые метаданные, определенные на компоненте, но для этого мне нужно получить доступ к ссылке на компонент.
Я пробовал следующий подход, но мне не удалось получить то, что мне нужно. Есть ли у кого-нибудь предложение?
@Component({...})
@View({...})
@MyAnnotation({...})
export class MyComponentA {...}
// Somewhere in a template
<myComponentA layout-item="my config 1"></myComponentA>
<myComponentB layout-item="my config 2"></myComponentA>
// ----------------------
@ng.Directive({
selector: "[layout-item]",
properties: [
"strOptions: layout-item"
],
host: {
}
})
export class LayoutItem {
// What works
constructor(@Optional() @Ancestor({self: true}) private component: MyComponent1) {
// with the constructor defined like this, component is defined with myComponent1 instance.
Reflector.getMetadata("MyAnnotation", component.constructor); // > metadata is here!
}
// What I needed
constructor(@Optional() @Ancestor({self: true}) private component: any) {
// This will crash the app. If instead of any I specify some other type, the app will not crash but component will be null.
// This directive can be applied to any component, so specifying a type is not a solution.
}
}