2016-07-18 13 views
0

それはコードですので、私は、単純なイベント・エミッターを書く必要がありますが、それは動作していないようです:持つEventEmitter角度2キャッチイベントとデバッグ

AppComponent

とメインアプリケーションのコンポーネント

@Component({ 
    selector:'my-app', 
    templateUrl:'app/app.component.html', 
    styleUrls:['app/app.component.css'], 
    directives:[ROUTER_DIRECTIVES,MenuBar], 
}) 
export class AppComponent{ 
    title:'My App' 
    activated(event:Routes){ 
     console.log('activated'); 
     console.log(received) 
    } 
} 

AppComponent。 html

<h1>{{title}}</h1> 
<menu-bar (activate)="activated($event)"></menu-bar> 
<div class="router-wrapper"> 
    <router-outlet></router-outlet> 
</div> 

ダウンロード

@Component({ 
    .... component's configurations.... 
}) 
class Download implements OnInit{ 
    ... some attributes and code ...; 

    @Output() activate:EventEmitter <Routes>= new EventEmitter<Routes>(); 
    r:Routes={}; 
    test(): void{ 
     console.log('emit start') 
     console.log(this.r); 
     try{ 
      this.activate.emit(this.r) 
     } 
     catch(err){ 
      console.log(err) 
     } 
     console.log('sent') 
    } 
} 

ダウンロードコンポーネントはルータコンセントにあります。 まず最初に、ダウンロードコンポーネントのconsole.logメッセージがすべて表示されますが、アプリコンポーネントにメッセージが表示されない理由は何ですか?私は間違って何をしていますか?
第2の問題は、メッセージの伝播に問題があると思います(私は間違っているかもしれません)ので、emitをデバッグしてイベントをグローバルにキャッチしたいと思いますか?もしそうなら、どうすればいいのですか?

答えて

1

@Outputs()からのイベントは、バブル処理されず、ルーティングされたコンポーネントでは役に立たない。

あなただけhttps://angular.io/docs/ts/latest/cookbook/component-communication.html

で説明したようにあなたは、ルーティングされたコンポーネントや親コンポーネント間の通信に共有サービスを使用することができます

(直接コンポーネントでリッスン)<download-component (activate)="..."のようにそれを使用することができます

関連する問題