我需要动态创建多个MD-Menus。由于需要模板参考变量在其语法中,这似乎不是一件容易的事。
例如。如果我有一个ng,以重复使用模板(例如下图(的组件实例的几种情况,我将由于其静态性质而无法调整#名称(除非有办法?(
<button [mdMenuTriggerFor]="menu">
<i class="{{icon}}">{{menu_header}}</i>
</button>
<md-menu #menu="mdMenu">
<button md-menu-item *ngFor="let m of menu_items">{{m}}</button>
</md-menu>
是否有一种可以用于嵌入NGFOR中的组件/模板的技术?
尝试使用ng-container
的动态组件渲染。示例:
@Component({
selector: 'menu-element-a',
template: '<li>My menu element. Add more stuff</li>'
})
class MenuElementA {
}
@Component({
selector: 'ng-my-menu',
template: `<ng-container *ngComponentOutlet="MenuElementA "></ng-container>`
})
class NgMyMenu {
MenuElementA = MenuElementA;
}
我在这里自己解决了这个问题:Angular2:使用管道渲染模板
我最终具有一个常数,其中一些组件名称(表单字段,输入等(,在我的形式视图中,我会动态地渲染每个字段是一个组件本身。
所以您可以拥有类似的东西:
export const MENU_OPTIONS = [
'ComponentA',
'ComponentB',
'ComponentC',
]
其中每个都是一个组件。
然后您可以这样使用:
<menu>
<menu-element *ngFor="let field of MENU_OPTIONS">
<ng-container *ngComponentOutlet="field";
ngModuleFactory: myComponentsModule;"></ng-container>
</menu-element>
</menu>
其中 myComponentsModule
是包含我们声明的常数中的组件的模块。
文档:https://angular.io/docs/ts/latest/api/common/index/ngcomponentoutlet-directive.html