Ich arbeite an der Verwendung eines Kendo in einem eckigen 2-Projekt.Binding Angular2-Komponenten innerhalb einer Jquery-Plugin-Vorlage
das Widget richtig eingestellt zu bekommen ist kein Problem:
ngOnInit() {
let options = inputsToOptionObject(KendoUIScheduler, this);
options.dataBound = this.bound;
this.scheduler = $(this.element.nativeElement)
.kendoScheduler(options)
.data('kendoScheduler');
}
Wenn das läuft, das Plugin modifiziert das DOM (und zu meiner knowleged, ohne modifiying den Schatten DOM von angular2 gehalten). Mein Problem ist, dass, wenn ich eine Komponente irgendwo innerhalb des Plugins verwenden möchte, wie in einer Vorlage, Angular seine Existenz nicht kennt und es nicht bindet.
Beispiel:
public views:kendo.ui.SchedulerView[] = [{
type: 'month',
title: 'test',
dayTemplate: (x:any) => {
let date = x.date.getDate();
let count = this.data[date];
return `<monthly-scheduler-day [date]="test" [count]=${count}"></monthly-scheduler-day>`
}
}];
Der monatlichen-Scheduler-Tages-Kurs:
@Component({
selector: 'monthly-scheduler-day',
template: `
<div>{{date}}</div>
<div class="badge" (click)=dayClick($event)>Available</div>
`
})
export class MonthlySchedulerDayComponent implements OnInit{
@Input() date: number;
@Input() count: number;
constructor() {
console.log('constructed');
}
ngOnInit(){
console.log('created');
}
dayClick(event){
console.log('clicked a day');
}
}
Gibt es einen "richtigen" Weg, um diese Komponenten im Innern des Markup durch das Widget erstellt zu binden? Ich habe es geschafft, indem ich auf das Bindungsereignis vom Widget gelauscht habe und dann die Elemente, die es erstellt hat, mit dem DynamicComponentLoader durchlaufen habe, aber es fühlt sich falsch an.