【发布时间】:2016-08-05 16:11:35
【问题描述】:
我有 2 个组件,我想在另一个中重复使用一个,所以这是我要重复使用 ExpressionBuilderComponent 的组件:
@Component({
selector: 'expression-builder',
template: `
<div class="container">
<expression *ngFor="#expression of expressions" [prototypes]="prototypes" [expression]="expression" [expressions]="expressions"></expression>
<a class="btn btn-primary" (click)="addExpression()"><i class="glyphicon glyphicon-plus"></i></a>
</div>
`,
directives: [ExpressionComponent]
})
比我有这样的 ExpressionComponent :
@Component({
selector: 'expression',
template: `
<div class="row">
<!-- First Select -->
<div class="col-xs-3">
<select class="form-control" [(ngModel)]="selectedPrototypeSelector" (ngModelChange)="onPrototypeChange()">
<option *ngFor="#p of prototypes" [value]="p.selector">
{{ p.selectorName }}
</option>
</select>
</div>
<!-- Expression Set selector -->
<div *ngIf="prototype?.valueType === 'Set'">
<expression-builder></expression-builder>
</div>
这是一个 PLUNKR,它应该显示 Test 两次,因为我使用了两次 <expression-builder>。
在我的项目中它显示为一个空元素,在这个屏幕截图中你可以看到它是如何呈现出来的:
有人可以帮我解决这个问题,在这种情况下它怎么可能起作用?
http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0
【问题讨论】:
-
首先你需要通过写
directives: [ExpressionBuilderComponent]来引用ExpressionBuilderComponent。在那之后,如果你想再次引用它,你应该在组件树的下方写directives: [forwardRef(() => ExpressionBuilderComponent)]。你试过了吗? -
使用plnkr.co/edit/nW00uu?p=info作为模板开始。
-
Plunker 似乎又开始工作了。
-
@GünterZöchbauer 你能帮帮我吗?我收到了这个错误,不知道他为什么会失败?
Error during instantiation of Token Promise<ComponentRef>!.plnkr.co/edit/ZqNXjd?p=preview -
如果没有其他办法,那么这是最有效的办法;-)
标签: typescript angular components