2016-05-22 12 views
3

Angular 2 quickstartを使用してプロジェクトをセットアップしました。parent2のイベント2リスナーが子からのイベントから呼び出されない

main.ts:

import { bootstrap } from '@angular/platform-browser-dynamic'; 

import { AppComponent } from './app.component'; 

bootstrap(AppComponent); 

app.component.ts:

import { Component } from '@angular/core'; 
import { MenuComponent } from './menu.component'; 

@Component({ 
    selector: 'my-app', 
    template: `<menu (onToggleEvent)="onToggle($event)"></menu>`, 
    directives: [ MenuComponent ] 
}) 
export class AppComponent { 
    onToggle(data) { 
     console.log(data); 
    } 
} 

menu.component.ts:

それから私は、同様のパターン as hereに従うことをしようと、次のコンポーネントを持っています
import { Component, Output, EventEmitter } from '@angular/core'; 

@Component({ 
    selector: 'menu', 
    template: `<button (click)="toggleMe()">Toggle Me</button>` 
}) 
export class MenuComponent { 
    @Output onToggleEvent = new EventEmitter(); 

    public toggleMe(): void { 
     this.onToggleEvent.emit('test'); 
    } 
} 

index.html:

<html> 
    <head> 
     <title>My page</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" href="styles.css"> 

     <!-- 1. Load libraries --> 
     <!-- Polyfill(s) for older browsers --> 
     <script src="node_modules/es6-shim/es6-shim.min.js"></script> 

     <script src="node_modules/zone.js/dist/zone.js"></script> 
     <script src="node_modules/reflect-metadata/Reflect.js"></script> 
     <script src="node_modules/systemjs/dist/system.src.js"></script> 

     <!-- 2. Configure SystemJS --> 
     <script src="systemjs.config.js"></script> 
     <script> 
      System.import('app').catch(function(err){ console.error(err); }); 
     </script> 
    </head> 

    <!-- 3. Display the application --> 
    <body> 
     <my-app>Loading...</my-app> 
    </body> 
</html> 

デバッグすると、toggleMe()が実行され、イベントが発行されますが、onToggle()メソッドは呼び出されません。理由は何ですか?

答えて

4

バグを発見しました - 私は@Output注釈の隣にカッコがありませんでした。私は、ブラウザーシンクとTypeScriptウォッチャーを使って、その場でトランジスターを使用するAngular QuickStartに含まれているシンプルなサーバーを使用していました。何とか@Output()の代わりにちょうど@Outputを追加することは決してtranspilerによって捕らえられず、これは黙って失敗しました。サーバーを停止して再起動しようとすると(エラーが発生した)、エラーが表示され、バグの原因となりました。

関連する問題