У меня есть BaseComponent
с template
набор. Я хочу использовать один и тот же шаблон HTML в компоненте, расширяющем базовую. Я знаю, что наследование класса в Angular2 предназначено только для классов, а не для декораторов. Поэтому мне кажется, что мне нужен новый декоратор, который найдет родительский класс и все его декораторы и применится к текущему классу. Некоторые свойства декораторов должны быть изменены (например, selector
для @Component
).Angular2 наследует декораторы в производном классе
1
A
ответ
1
Вы можете создать свой собственный компонент, который создает и регистрирует метаданные компонентов, используя один из его родительского класса.
Нечто подобное:
export function CustomComponent(annotation: any) {
return function (target: Function) {
var parentTarget = Object.getPrototypeOf(target.prototype).constructor;
var parentAnnotations = Reflect.getMetadata('annotations', parentTarget);
var parentAnnotation = parentAnnotations[0];
Object.keys(parentAnnotation).forEach(key => {
if (isPresent(parentAnnotation[key])) {
annotation[key] = parentAnnotation[key];
}
});
var metadata = new ComponentMetadata(annotation);
Reflect.defineMetadata('annotations', [ metadata ], target);
}
}
Вы можете использовать его таким образом:
@Component({
template: `
(...)
`
})
export class ParentComponent {
}
@CustomComponent({
selector: 'test'
})
export class ChildComponent extends ParentComponent {
}
Посмотреть этот вопрос более подробно:
+0
Я использую Angular beta rc1. 'ComponentMetadata',' Reflect.getMetadata() ',' isPresent() 'и' Reflect.defineMetadata() 'неизвестны. Что мне следует импортировать? – koral
Смежные вопросы
- 1. Декораторы и в классе
- 2. Декораторы Angular2 не определены
- 3. AssemblyInitialize в производном классе
- 4. RemoveHandlers в производном классе
- 5. Внутренние декораторы в классе Python
- 6. Как неоднозначность решена в производном классе здесь?
- 7. vtable updation в производном классе
- 8. typedef неизвестно в производном классе
- 9. Неиспользуемый метод в производном классе
- 10. Реализовать IDisposable в производном классе
- 11. Синхронизированный метод в производном классе
- 12. Свойство переопределения в производном классе
- 13. Переопределить onTouchEvent в производном классе
- 14. Перекрытие toSting в производном классе
- 15. Чистые виртуальные методы в производном абстрактном классе
- 16. Добавление к виртуальной функции в производном классе
- 17. Реализовать слоты в производном классе - qt4/C++
- 18. Удалить dynamic_cast в производном классе узла дерева
- 19. Объект доступа в производном классе от Vector
- 20. Переопределить свойство другому типу в производном классе
- 21. Функция поиска в производном классе, условие цикла
- 22. Применение питона декораторы методов в классе
- 23. Angular2 @HostListener не работает в производном компоненте
- 24. Уведомлять в производном классе, когда свойство изменилось в базовом классе
- 25. const в базовом классе vs static const в производном классе
- 26. Повторное использование переменных в базовом классе в производном классе: Scala
- 27. Первичная декларация enum в базовом классе, определение в производном классе
- 28. Определение функции в производном классе без объявления в базовом классе
- 29. Копировать конструкцию и оператор присваивания в производном классе
- 30. Выявление только некоторых унаследованных методов в производном классе
См. Также https://github.com/angular/angular/issues/7968 –