Используется довольно давно, пытаясь выяснить, почему родитель не получает событие и вызывает функцию.Angular2 eventEmitter, parent wont catch it
У родительского приложения (так называемый 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 («Событие было 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