Вы правы, множественное наследование недоступно (к сожалению, потому что это было бы очень круто).
Возможность 1 Кажется, что ваши общие действия могут жить внутрипростой компонент списка, и вы можете предоставить свойства, необходимые в расширяющих компонентах (например, путях) в конструкторе.Когда вы вызываете super (), параметры конфигурации могут быть переданы вниз.
export class SimpleListComponent {
constructor(
routePath: string,
) {}
}
// extending component
export class HeroSlimListComponent extends SimpleListComponent {
constructor() {
super('<my-route-path>');
}
}
Возможность 2 Возможно, стоит проверить mixins !Я не играл с ними, так что, может быть, кто-то с некоторым опытом может взвесить?Не похоже, что они полностью решат проблему, поскольку вам все еще нужно реализовать интерфейс, но это может быть хорошим общим набором функций для родительских компонентов.
Возможность 3 (возможно, мой личный фаворит) Сохраняйте общий список и компоненты расширенного списка как компоненты, которые принимают входные данные и дают выходные данные, а не расширяют их.Вместо этого используйте их в HTML.Например, могут быть переданы навигационные пути, а службы данных могут быть предоставлены на родительском компоненте уровня и внедрены в дочерние компоненты в дереве.Чтобы настроить элементы списка, вы можете передать ссылки на шаблоны (см. Примеры таблиц материалов ).Это лишь грубый пример, и его нужно было бы оптимизировать, но вот вам:
// simple list component
// selector = simple-list
constructor(simpleListService: SimpleListService) {}
// hero simple list component
@Component({
....
providers: [
{ provide: SimpleListService, useClass: HeroSimpleListService },
],
})
// html
<simple-list [navPath]='heroNavPath' <...other templates / props>>
Следует иметь в виду, что каждый фрагмент кода из класса, который вы расширяете, снова добавляется в вашу окончательную сборку как дубликаткод в каждом расширяющем компоненте (ознакомьтесь с результатами сборки prod, это довольно интересно).