2016-10-23 3 views
0

私は2つのコンポーネントを持っています。私はそのコンポーネント上のイベントエミッターに文字列を放出させるクリック機能を持っています。親テンプレートでは、子タグでは、単純なコンソールに単純なメッセージを記録する親コンポーネントの関数をトリガーするイベントエミッターがあります。イベントのエミッタ変数をコンソールに記録すると、子のクリック機能が動作しているのがわかりますが、親に正しく出力されない理由を理解できません。Angular2、子出力が親にバブリングしない

子コンポーネント

import {Component, OnInit, EventEmitter} from 'angular2/core'; 

@Component({ 
    selector: 'team-bubbles', 
    templateUrl: '/static/partials/team/team-bubbles.html', 
    outputs: ['sendTeamDataUp'], 
}) 

export class TeamBubblesComponent { 
    sendTeamDataUp:EventEmitter<string>; 

    constructor() { 
     this.sendTeamDataUp = new EventEmitter(); 
    }; 

    invokeTeamDataEmitter() { 
     console.log('Made it this far'); 
     this.sendTeamDataUp.emit('WAKA WAKA WAKA'); 
    } 

    OnInit() { 
     console.log('TEAM BUBBLE WORKS'); 
    } 
} 

チームbubbles.html

<div class="bubble-wrapper sm" id="bubble-1" (click)="invokeTeamDataEmitter()"> 
     <div class="team-bubble sm"> 
      <img src="/static/images/team/guy1.jpg" alt="guy 1"> 
     </div> 
    </div> 

親コンポーネント

import {Component} from 'angular2/core'; 
import {TeamBubblesComponent} from "./teambubbles.component"; 
import {TeamInfoComponent} from "./team-info.component"; 

@Component({ 
    selector: 'team', 
    templateUrl: '/static/partials/team/team.html' 
}) 

export class TeamComponent { 

    receiveData(){ 
     console.log('Output Works'); 
    } 
} 

team.html

<div class="full-wrapper team-bubbles-container"> 
    <div class="container"> 
     <div class="row"> 
      <team-bubbles (sendTeamDataUp)="receiveData($event)"></team-bubbles> 
     </div> 
    </div> 
</div> 
<div class="full-wrapper member-bio-container"> 
    <div class="container" style="padding: 5px;"> 
     <div class="row"> 
      <team-info></team-info> 
     </div> 
    </div> 
</div> 
+1

それは私のために動作します。それをプランナーで再現できますか? – yurzui

+0

旧バージョンのangular2を使用しているようです。親コンポーネントの 'directives'配列に子コンポーネントを追加する必要があります。https://plnkr.co/edit/1vYZFhnPyePiWwWBYgPs?p=preview – yurzui

+0

私はそれを試してみましょう。 Angular2のバージョンをアップグレードする必要がありますか? – JBT

答えて

1
sendTeamDataUp:EventEmitter<string>; 

    constructor() { 
     this.sendTeamDataUp = new EventEmitter<string>();   //<<<### added <string> 
    }; 

    invokeTeamDataEmitter() { 
     console.log('Made it this far'); 
     this.sendTeamDataUp.emit('WAKA WAKA WAKA'); 
    } 

OR

sendTeamDataUp:EventEmitter<string>=new EventEmitter<string>(); //<<<### declare here 

    invokeTeamDataEmitter() { 
     console.log('Made it this far'); 
     this.sendTeamDataUp.emit('WAKA WAKA WAKA'); 
    } 
+0

ありがとうございましたが、それらの変更のどちらも私のために働いていませんでした。 typescriptでは、タイプが指定されていない場合は、単に 'any'のタイプにデフォルト設定されていますか? – JBT

+0

出力を削除することができます:['sendTeamDataUp']、 '' @Output()sendTeamDataUp:EventEmitter = new EventEmitter (); ' – micronyks

+0

のように出力コンポーネントの代わりに出力デコレータを使用できますか?親にバブルアップしない:/ – JBT

関連する問題