0
アイテムを動的に読み込むカートを作成しようとしています。他のコンポーネントからコンポーネントを動的に作成する
サイドバーコンポーネント.TS
@ViewChild('cartContainer', { read: ViewContainerRef }) public container;
public componentRef: ComponentRef<any>;
public createComponent(type: any) {
this.container.clear();
const factory: ComponentFactory<any> = this.resolver.resolveComponentFactory(CartComponent);
this.componentRef = this.container.createComponent(factory);
this.componentRef.instance.type = type;
this.componentRef.instance.output.subscribe(event => console.log(event));
}
サイドバーコンポーネント.HTML
<ng-template #cartContainer></ng-template>
カート部品.TS
export class CartComponent {
@Input() public type = 'success';
@Output() output = new EventEmitter();
}
カート部品.HTML
<div id="cd-cart" class="speed-in">
<h1 (click)="output.next('output')">Cart {{ type | json}}</h1>
<ul class="cd-cart-items" style="height: 50vh!important;">
<li *ngFor="let CartItem of CartItems; let index = i;">
<span class="cd-qty">1x</span> CRISTOMORADO MAIZMORADO KG
<div class="cd-price">S/.7.00</div>
<a href="#0" class="cd-item-remove cd-img-replace">Remove</a>
</li>
StoreItemsコンポーネント.TS
constructor(private _sidebarComponent: SidebarComponent){}
private addItem(key: string, value: object) {
this._sidebarComponent.createComponent(value);
}
StoreItemsコンポーネント.HTML
<div class="ui-g">
<div *ngFor="let Item of Items" class="ui-g-2">
<a href="javascript:;" (click)="addItem('cart', Items)"><md-card class="item-card">
<div class="ui-g-2-top">{{ Item.Item_Description }}</div>
<div class="ui-g-2-bottom">{{ MONEY_CHAR }}{{ Item.ITEM_Sale_Price | number : '1.2-2'}}</div>
</md-card></a>
</div>
しかし
LayoutComponent .HTML
<app-sidebar></app-sidebar>
、私はのaddItem()を呼び出し、それがにcreateComponentを(呼び出す)、それは(私のViewChildを認識しない)
Cannot read property 'clear' of undefined
私は何が欠けていますか?
私のために正常に動作していますし、どこで 'addItem'を呼び出しますか? –
私の編集内容を参照してください – francojay
なぜ 'ng-template'を使用しますか? 'ng-container'で試してみることはできますか? –