Aks*_*ale 4 angular2-services angular2-components angular
在有人将其标记为重复之前以下是我尝试过但失败的链接
场景我想将数据从我的 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);
}
);
}
Run Code Online (Sandbox Code Playgroud)
我的组件
constructor(private http:Http, private myService: MyService)
{
var userDetails;
myService.event_callback.subscribe(
data => this.callbackFunction()
);
}
callbackFunction()
{
console.log("Inside MyComponent")
}
Run Code Online (Sandbox Code Playgroud)
控制台日志
Inside My Service
Run Code Online (Sandbox Code Playgroud)
HTTP 请求正确返回数据,我在发出之前尝试转储,它工作但问题是我无法访问组件中的数据,我尝试传递数据,现在我只是一些记录消息来识别流,但仍然无法看到来自我的组件文件的日志消息。
我错过了什么?
在您的情况下,我建议使用可观察的主题而不是 @Output。
在您的服务中,插入:
@Output() event_callback: EventEmitter<any> = new EventEmitter();
Run Code Online (Sandbox Code Playgroud)
创建新的可观察源和流(记住从“rxjs/Subject”导入主题):
private eventCallback = new Subject<string>(); // Source
eventCallback$ = this.eventCallback.asObservable(); // Stream
Run Code Online (Sandbox Code Playgroud)
安装于:
this.event_callback.emit(this.user_data);
Run Code Online (Sandbox Code Playgroud)
通过以下方式发送消息:
this.eventCallback.next(this.user_data);
Run Code Online (Sandbox Code Playgroud)
然后,在您的组件中:
myService.eventCallback$.subscribe(data => {
this.callbackFunction();
});
Run Code Online (Sandbox Code Playgroud)
请参阅:Plunker 上的工作示例
阅读有关此解决方案的更多信息: Angular.io - 通过服务进行通信
| 归档时间: |
|
| 查看次数: |
8132 次 |
| 最近记录: |