Angular 2重用组件选择器

时间:2016-04-12 13:06:52

标签: typescript angular components

我想重新使用一个如下所示的组件选择器:

@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>
`,
})

但如果我在其他组件中设置它,它将不会显示任何内容:

@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>

<!-- Second Select -->
    <div [ngClass]="{'col-xs-3': prototype?.valueType !== 'Set', 'col-xs-2': prototype?.valueType === 'Set'}" *ngIf="prototype">
        <select class="form-control" [(ngModel)]="expression.constraint">
            <option *ngFor="#constraint of prototype.constraints" [value]="constraint">
                {{ constraint }}
            </option>
        </select>
    </div>

<!-- Third Select -->
    <div [ngClass]="{'col-xs-3': prototype?.valueType !== 'Set', 'col-xs-2': prototype?.valueType === 'Set'}">

       <div>{{expression | json}}</div>
   </div>
    <div class="col-xs-1">
        <a class="btn btn-danger pull-right" (click)="deleteExpression()"><i class="glyphicon glyphicon-remove"></i></a>
    </div>

    <!-- Expression Set selector -->
    <div *ngIf="prototype?.valueType === 'Set'">
       <expression-builder></expression-builder>
    </div>
</div>
`,
directives: [ExpressionBuilderComponent]
})

如果我在这里设置它我会得到以下错误:

Unexpected directive value 'undefined'

我希望在我的案例valueType = Set

中重复使用该模板

1 个答案:

答案 0 :(得分:0)

在你设置的<div class="product"> <p>Name1<p> </div> <div class="product"> <p>Name2<p> </div> <div class="product"> <p>Name3<p> </div> <div class="product"> <p>Name4<p> </div> <div class="settings"> <p>SETTINGS<p> </div> 中:

component

您必须将<!-- Expression Set selector --> <div *ngIf="prototype?.valueType === 'Set'"> <expression-builder></expression-builder> </div> 的班级名称添加到expression-builder的{​​{1}}属性中,让angular2知道您在模板中使用的指令/组件类型。

例如,如果directives的类名是@Component()且父组件的类名是expression-builder,那么您将得到以下内容:

<强> expression.set.component.ts

ExpressionBuilderComponent