2016-03-01 79 views
0

我使用角2公测6事件发射赶不上

我的自定义事件没有逮住了

import {Component, OnInit, EventEmitter} from 'angular2/core'; 
import {NgForm} from 'angular2/common'; 
import {Output} from "angular2/core"; 
@Component({ 
    template: '<form class="form-horizontal" (ngSubmit)="onSubmit()" #registrationForm="ngForm" style="color: #676767"> 
     <button type="submit" >Send Event</button> 
    </form>' 

}) 
export class registrationComponent { 

    @Output() logged: EventEmitter<any> = new EventEmitter(); 

    onSubmit() { 
     console.log(Button clicked); 
     this.logged.emit(null); // Emits an event on clicking the button 
     } 

} 

我添加了另一个分量与监听记录我的事件。

import {Component} from 'angular2/core'; 

@Component({ 
    selector: 'message-com', 
    template: '<div (logged)="getLoggedIn($event)">Hello<div>' 
}) 
export class MessageComponent { 


    getLoggedIn() { 

     alert("Event received "); 

    } 
} 

我在控制台中看到“Button clicked”。但我期待 “事件接受”

+0

请添加更多信息。 'registrationComponent'的选择器是什么? –

回答

0
templateUrl: <div (logged)="getLoggedIn($event)">Hello<div>' 

应该

template: '<div (logged)="getLoggedIn($event)">Hello<div>' 

<div>不发出logged事件。

0

我认为将两个组件链接在一起时(除了@Günter发现的问题)还有问题。您不要在MessageComponent之一中使用registrationComponent。这样您就无法赶上事件,因为registrationComponent实际上是在MessageComponent之一中使用的。

你应该重构你的两个组成部分是这样的:

  • 添加选择的registrationComponent组件:

    import {Component, OnInit, EventEmitter} from 'angular2/core'; 
    import {NgForm} from 'angular2/common'; 
    import {Output} from "angular2/core"; 
    @Component({ 
        selector: 'registration', 
        templateUrl: 'views/registration.html' 
    }) 
    export class registrationComponent { 
        @Output() logged: EventEmitter<any> = new EventEmitter(); 
    
        onSubmit() { 
        this.logged.emit(null); 
        } 
    } 
    
  • MessageComponent组件的directives属性设置registrationComponent,并用它由于其选择器:

    import {Component} from 'angular2/core'; 
    import {registrationComponent} from '...'; 
    
    @Component({ 
        selector: 'message-com', 
        template: ` 
        <registration (logged)="getLoggedIn($event)">Hello<registration> 
        `, 
        directives: [ registrationComponent ] 
    }) 
    export class MessageComponent { 
        getLoggedIn() { 
        alert("Event recieved "); 
        } 
    } 
    
+0

我正在加载我的应用程序组件中的注册组件和消息组件<注册>正在加载... 正在加载..

+0

这不是正确的方法:-(只设置你的主在你的HTML条目文件中加入一个'message-com'并引导它:'boostrap(MessageComponent);'。然后在你的'MessageComponent'中使用'registrationComponent'组件,事件只能由父组件捕获,所以'MessageComponent'需要成为'registrationComponent'的父代,这就是为什么你需要在'MessageComponent'里面使用'registrationComponent' ... –

+0

我将getLoggedIn(){ } }代码更改为应用程序.componet.ts文件,是否有意义?那么注册是儿童a nd它将事件发送给父组件“app.component”。这个好吗 ? –