Решение кажется проще, чем я думал раньше.
Я создаю новую директиву окружения, в которой я могу получить доступ к
- ContentChild => - компоненту множественного выбора, где мы имеемДоступ ко всем свойствам
- ViewChild => - это заголовочный шаблон, который я хочу назначить для мультиселекта
. С помощью этого решения я могу получить доступ ко всем естественным свойствам из оригинального мультиселектора, и я только расширяюнужные мне функции с помощью ng-content
sq-multiselect-extension.html:
<ng-template kendoMultiSelectHeaderTemplate let-dataItem>
<strong (click)="toggleSelection()" class="m-2 link-cursor">Alle Auswählen</strong>
</ng-template>
<ng-content></ng-content>
sq-multiselect-extension.ts:
import { Component, OnInit, ViewChild, ContentChild } from '@angular/core';
import { HeaderTemplateDirective, MultiSelectComponent } from '@progress/kendo-angular-dropdowns'
@Component({
selector: 'sq-multiselect-extension',
templateUrl: './sq-multiselect-extension.html',
})
export class SxpMultiselectComponent implements OnInit {
@ViewChild(HeaderTemplateDirective) headerTemplate: HeaderTemplateDirective;
@ContentChild(MultiSelectComponent) multiselect: MultiSelectComponent;
public ngOnInit() {
this.multiselect.headerTemplate = this.headerTemplate;
}
public toggleSelection(): void {
if (this.multiselect.value.length > 0) {
this.multiselect.reset();
}
else {
this.multiselect.writeValue(this.multiselect.data)
this.multiselect.value = this.multiselect.data.slice();
}
}
}
и использовать этот новый компонент
<sq-multiselect-extension>
<kendo-multiselect [data]="listStringItems" [(ngModel)]="value" class="form-control">
</kendo-multiselect>
</sq-multiselect-extension>