将数据从服务传递到组件

时间:2016-12-20 21:13:20

标签: angular angular2-services angular2-components

在有人将此标记为重复之前以下是我尝试过但失败的链接

Angular 2 - passing data from service to component

How to subscribe to an event on a service in Angular2?

情景 我想将数据从我的ng2服务发送到组件,并使用ng2 HTTP

从API加载数据

下面是虚拟代码

为MyService

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

getUserDetails(id)
{
    var user_data;
    this.loadRemoteUrl('getUserdata?user_id=' + id).subscribe(
        data => { user_data = data},
        err => console.error(err),
        () => {
            console.log('Inside My Service');
            this.user_data = user_data;
            this.event_callback.emit(this.user_data);
        }
    );
}

MyComponent的

constructor(private http:Http, private myService: MyService) 
{
    var userDetails;
    myService.event_callback.subscribe(
        data => this.callbackFunction()
    );
}

callbackFunction()
{
    console.log("Inside MyComponent")
}

控制台日志

Inside My Service

HTTP请求正在正确地返回数据,我尝试在发出之前进行转储并且它工作但问题是我无法访问我的组件中的数据,我尝试传递数据,现在我只是一些记录消息来识别流但仍然无法从我的组件文件中查看日志消息。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

在您的情况下,我建议使用可观察的主题。

在您的服务中,提出:

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

创建新的可观察源和流(记住从#34导入主题; rxjs / Subject&#34;):

private eventCallback = new Subject<string>(); // Source
eventCallback$ = this.eventCallback.asObservable(); // Stream

Insted of:

this.event_callback.emit(this.user_data);

发送消息:

this.eventCallback.next(this.user_data);

然后,在你的组件中:

myService.eventCallback$.subscribe(data => {
    this.callbackFunction();
});

请参阅:working example on Plunker

详细了解此解决方案: Angular.io - Communicate via a service