Angular 2:父子组件属性绑定

时间:2017-09-05 07:45:16

标签: angular boolean parent-child angular-components property-binding

您如何绑定子组件的属性?我希望通过其父组件将变量high设为false or !this.high,但事实是,孩子正在循环

应用产品

<button class="ui primary small button"(click)="clearVals()">Clear Selected</button>
<app-product-list [dataSource]="data"></app-product-list>


@ViewChild(ProductListComponent) prodList: ProductListComponent;
clearVals() {
    this.selectedOutsourced = this.selectedPrice = 0;
    this.prodList.clear();
    this.selectedArray = [];
}

应用产品列表

<div class="products-cards" *ngFor="let product of dataSource['docs']">
      <app-product-card [product]="product"(highlightEvent)="highlight($event)">
      </app-product-card>
</div>


@ViewChild(ProductCardComponent) prodCard: ProductCardComponent;

应用产品卡

<div class="list card ui" (click)="highlight()" [class.selected]="high"> </div>


high : boolean = false;
highlight(){
     this.high = !this.high;
}

这是育儿的顺序。最顶层的是父母的孩子

2 个答案:

答案 0 :(得分:1)

这个很有趣我读完之后就注意到了5个时间。

你的div有* ngFor。 你的孩子在那个div里,所以这个孩子将会成为你的孩子。

<div class="products-cards" *ngFor="let product of dataSource['docs']">
          <app-product-card [product]="product"(highlightEvent)="highlight($event)">
          </app-product-card>
    </div>

应该是

    <div class="products-cards" *ngFor="let product of dataSource['docs']">
        </div>
<app-product-card [product]="product"(highlightEvent)="highlight($event)">
              </app-product-card>

然后在你的孩子身上

@Input()
  set product(product: any) {
    highlightF(product);
  }

highlightf(product: any){
  this.hightlight.emit(product);
}

现在在你的父母:

//Do something to set product.highlight

答案 1 :(得分:1)

您需要将子组件中的代码更改为

app-product-card子组件 typescript

import { Component, Input, Output, EventEmitter } from '@angular/core';

@Input() product: any;

@Output() highlightEvent= new EventEmitter();

highlight(){
   this.highlightEvent.emit(somevalue);

}