Хорошо, после двух дней путаницы мне удалось получить то, что я хотел - это не оптимально, но оно работает, и это выглядит просто. Весь трюк состоял в том, чтобы добавить переменную шаблона для ссылки на компонент оболочки.
Шаблон становится:
<wrapper-component #mySource filter="key='abcd'">
<item-viewer *ngFor="let item of mySource.itemlist" [data]="item"></item-viewer>
</wrapper-component>
После того, как компонент обертка присвоен переменной шаблона #mySource, можно ссылаться на него и его общие свойства в шаблоне включены через.
Затем, когда есть изменения в WrapperComponent.itemlist, выход ngFor обновляется соответствующим образом.
Это мой полностью общий компонент визуализации пункта:
@Component({
moduleId: module.id,
selector: 'item-viewer',
templateUrl: '<h1>{{data.title}</h1><p>{{data.paragraph}}</p>'
})
export class ItemViewer{
@Input() data: any;
constructor() { }
}
И это компонент обертки:
@Component({
moduleId: module.id,
selector: 'wrapper-component',
template: '... <ng-content></ng-content> ...'
})
export class WrapperComponent{
@Input() filter: string;
itemlist: any[];
constructor() { }
ngOnInit() {
// every three seconds the component adds a new item to
// itemlist to show that it is rendered by ItemViewer
setInterval(()=> {
this.itemlist.push({ title: "title"+filter,
paragraph: "par"+ filter
});
}, 3000);
}
}
Единственный крупный недостаток, который я могу найти с помощью этого решения является то, что переменная #mySource становится глобальной переменной шаблона - на нее можно ссылаться также вне перехода, что, безусловно, нежелательно. И если вы хотите повторно использовать один и тот же метод несколько раз, вам нужно каждый раз менять имя переменной.
Если у вас есть идеи или проблемы, укажите, пожалуйста, дайте мне знать.
Что вы не передадите его '' ** и ** ''. Вы можете использовать совместно используемую службу для обмена данными, иначе нет простого способа для переноса элементов, за исключением того, что вы заранее знаете тип компонента. –
привет @ GünterZöchbauer, спасибо за ваш комментарий. Я нашел решение своего вопроса и отправил его в качестве ответа - я вижу, что вы специалист в Angular2, может быть, вы можете сказать мне, если вы видите проблемы с этим подходом. Благодаря! – udik
Выглядит хорошо. , , , ... , .. –