已經使用了相當一段時間了,試圖找出父母沒有收到事件並調用函數的原因。Angular2 eventEmitter,父母不會捕獲它
有一個父應用程序(稱爲AppComponent)和子組件(稱爲HomeComponent)
HomeComponent.ts
@Component({
selector: 'home-component',
providers: [],
moduleId: module.id,
encapsulation: ViewEncapsulation.None,
templateUrl: 'home.component.html',
styleUrls: ['home.component.css'],
directives: [BannerComponent],
})
export class HomeComponent {
@Output() selected = new EventEmitter<boolean>();
products: Array<Product> = [];
isProductSelected: boolean = false;
constructor(public productService: ProductService) {
}
addProductToBasket(product: Product) {
// Add product to basket.
this.productService.addProduct(product);
this.isProductSelected = true;
if (this.isProductSelected) {
console.log("Event has been emittet");
this.selected.emit(this.isProductSelected);
//Sets to default
this.isProductSelected = false;
}
}
}
我要通知父組件,當已經將產品加入到籃子。已檢查控制檯,並可以看到該行console.log(「Event has been emittet」);正在被調用,所以它應該發送事件。
AppComponent.html
<aside class="aside" [ngClass]="{'aside-active': isClassVisible }">
<div class="basket_products" *ngFor="#product of products">
</div>
</aside>
<router-outlet (selected)="selected($event)"></router-outlet>
這裏我使用的ngFor,之後我曾嘗試使用(選擇)= 「選擇($事件)」應該調用的方法所述AppComponent.ts
AppComponent.ts
selected(selected: boolean)
{
console.log("Event catches");
if (selected) {
// Get new data
this.totalProducts = this.productService.getTotalProducts();
this.totalprice = this.productService.getTotalProductPrice();
this.shippingPrice = this.productService.getShippingPrice();
}
}
問題是該方法從未被調用過。
曾經試圖按照步驟「家長監聽子女活動」你在這裏看到Angluar2 interactions:
是否有人在這裏,看到我做了什麼錯?
其選擇的成分..遺憾的混淆。 – Mikkel
請從組件中刪除'@Injectable()'。你只需要它的服務,但不是像@Component(),@ @ Directive()','@Pipe()'等其他裝飾器已經在那裏。這些裝飾器包括'@Injectable()' –
好的,做到了。我並沒有真正關注你想告訴我的事情。 現在我正在使用路由,並加載家庭組件如: router-outlet> –
Mikkel