我正在使用 Angular 2-rc3 并且有一个Component
并且我想以一种不同的方式应用嵌入。这是我的组件:
import { Component, Input } from '@angular/core';
@Component({
selector: 'my-list',
template: `<ul>
<li *ngFor="let item of data">
-- insert template here --
<ng-content></ng-content>
</li>
</ul>`
})
export class MyListComponent {
@Input() data: any[];
}
我像这样使用它:
<my-list [data]="cars">
<div>{{item.make | uppercase}}</div>
</my-list>
如您所见,我正在尝试定义一个将由我的组件使用的内联模板。现在这发生了可怕的错误。首先,一个数据绑定异常说它can't read property 'make' of undefined
。它试图读取item.make
我周围的组件,而不是MyListComponent
. 但即使我暂时禁用它:
<my-list [data]="cars">
<div>{item.make | uppercase}</div>
</my-list>
然后出现第二个问题:
-- insert template here --
-- insert template here --
-- insert template here --
-- insert template here --
{item.make | uppercase}
所以 Angular 实际上并没有复制模板以供在 中使用*ngFor
,它只是绑定元素并且它们最终与最后一项相关联。
我怎样才能让它工作?
我对 AngularJS 也有同样的问题,petebacondarwin 发布了一个通过 compile 操作 DOM 的解决方案,这很棒。通过注入我的组件,我也有 Angular 2 的这个选项ElementRef
,但是!一个很大的区别是AngularJS 在数据绑定之前就关闭了,这意味着在模板中compile
使用没有问题。{{item.make}}
使用 Angular 2,这似乎是不可能的,因为{{item}}
它是预先解析的。那么解决这个问题的最佳方法是什么?使用稍微不同的符号[[item]]
和字符串替换整个东西似乎不是最优雅的方式......
提前致谢!
// 编辑:这是一个重现问题的Plnkr。