angular - 将数据从服务传递到组件

标签 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 加载数据

下面是伪代码

我的服务

@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);
        }
    );
}

我的组件

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 请求正在正确返回数据,我在发出之前尝试转储并且它有效但问题是我无法访问我的组件中的数据,我尝试传递数据,现在我只是一些日志消息来识别流但仍然无法从我的组件文件中查看日志消息。

我错过了什么?

最佳答案

在你的情况下,我建议使用可观察的主题而不是@Output。

在您的服务中,代替:

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

创建新的可观察源和流(记得从“rxjs/Subject”导入主题):

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

代表:

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

关于angular - 将数据从服务传递到组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251348/

相关文章:

Angular 2 : dynamic selector property

Angular2 - 带动画的动态组件加载

angular - 条件样式和绑定(bind)

typescript - Angular 2 - 共享服务的实现

angular - Subject.next 不在 ngOnInit 中触发

angular - 订阅方法不对更改使用react[Angular 2]

javascript - Angular 2 Exception : TypeError: 'caller' , 'callee' 和 'arguments' 属性可能在严格模式函数或参数对象上

angular - 组件渲染后如何从指令中调用函数?

angular - 使用 HttpClient 处理 500(内部服务器错误)

angular - 如何将 Bootstrap 3 日期选择器添加到 Angular 4 项目