2017-05-17 8 views
1

Angular2 및 Typescript의 일부 아기 단계를 거친 후 일반 자바 스크립트 CometD 라이브러리를 사용하는 애플리케이션을 작성하기로 결정했습니다. 이 응용 프로그램은 CometD 채널에서 데이터를 가져 와서 어떻게 든 사용자에게 제공해야합니다.Angular 2의 CometD 채널 처리 문제가 발생했습니다.

그래서 기본적으로 CometD js 라이브러리를 참조하여 간단한 구성 요소를 만들었습니다. 나는이 프로그램을 실행할 때

import { Component } from '@angular/core'; 
import * as cometd from '../cometd/cometd'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 

export class AppComponent { 

    title = 'app works!'; 
    cometD: any; 

    constructor() { 
    console.log("Starting cometD service ..."); 
    this.cometD = new cometd.CometD(); 
    this.cometD.configure({ url: '/services/cometd', logLevel: 'debug', requestHeaders: { "userID": 555 } }); 
    this.title = "CometD demo"; 
    this.cometD.handshake(); 
    this.subscribe() 
    } 


    subscribe() { 
    this.cometD.subscribe('/mychannel', (message)=> this.mychannelHandler(message)); 
    } 

    mychannelHandler(message) { 
    console.log("MESSAGE FROM SERVER RECIEVED: " + message + ", data: " + message.data); 
    this.title = message.data; 
    } 


} 

는 cometD에서 콘솔 디버그 메시지를이 - 연결이 OK입니다, 오는 일부 데이터가 있다는 것을,이 채널에 구독을 추가, 일부 출력되었습니다. 그러나.

mychannelHandler는 호출되지 않습니다. 메시지는 절대로 콘솔로 전달되지 않고 제목 변수가 설정되지 않습니다. 내가 뭘 놓치고 있니?

도움이되는 답변을 해주셔서 감사합니다.

답변

0

여기서는 this.mychannelHandler으로 전화하지 않습니다. 에

subscribe() { 
    this.cometD.subscribe('/mychannel',() => this.mychannelHandler); 
} 

변경을 :

this.cometD.subscribe('/mychannel', this.mychannelHandler); 
// OR 
this.cometD.subscribe('/mychannel', (message) => this.mychannelHandler(message)); 
+0

감사합니다, 나는 그것을 변경했습니다,하지만 여전히 작동하지 않습니다 :(subscribe에 대한 귀하의 콜백 this.mychannelHandler를 호출하지 않습니다 – NullpointerExceptionBuster