Angular 角度2-无响应将对象发送到<;路由器出口>;具有可观察服务的组件

Angular 角度2-无响应将对象发送到<;路由器出口>;具有可观察服务的组件,angular,observable,Angular,Observable,我正在尝试通过从父组件、对象到子组件的服务传递。我使用文档来指导我,但是当我尝试运行应用程序时,我没有收到任何错误或输出 服务代码: import {Injectable} from '@angular/core'; import {Subject} from 'rxjs'; import {MyObject} from '../models/my-object.model'; @Injectable() export class ObjectTransferService { pri

我正在尝试通过
从父组件、对象到子组件的服务传递。我使用文档来指导我,但是当我尝试运行应用程序时,我没有收到任何错误或输出

服务代码:

import {Injectable} from '@angular/core';
import {Subject} from 'rxjs';
import {MyObject} from '../models/my-object.model';

@Injectable()
export class ObjectTransferService {
    private myObjectSource = new Subject<MyObject>();
    objectSource$ = this.myObjectSource.asObservable();

    sendMyObject(myObject: MyObject) {
        this.myObjectSource.next(myObject);
    }
 }
更新(已回答) 将
newsubject()
更改为
newbehaviorsubject({})


我相信这没有收到回复的原因是,在我订阅该主题后,该主题没有被更新为新值。使用BehaviorSubject可以使用最新的值更新观察者,如本文所述。

存在计时问题。
ParentComponent
ngOnInit()
中的事件是在执行
ChildComponent
的构造函数之前发出的,因此订阅发生得太晚

BehaviorSubject
记住最后一个事件并将其传递给新订阅者,因此
ChildComponent
在设置订阅后立即接收事件。
或者可以使用
ReplaySubject
ReplaySubject
不需要初始值。

如果使用
new BehaviorSubject(),是否有效而不是
新主题()?我假设您在
ChildComponent
中没有提供
ObjectTransferService
,对吗?@GünterZöchbauer正确,孩子没有提供ObjectTransferService。@GünterZöchbauer是的!它与
newbehaviorsubject()一起工作:)谢谢。
import {Component} from '@angular/component';
import {MyObject} from '../models/my-object.model';
import {ObjectTransferService} from '../service/object-transfer.service';

@Component({
    template: `
    <router-outlet></router-outlet>
    `,
    providers: [ObjectTransferService]
})
export class ParentComponent implements OnInit {
    public myObject: MyObject = <MyObject>{ foo: 'bar' };
    constructor(private objectTransferService: ObjectTransferService){}

    public ngOnInit(): void {
        this.objectTransferService.sendMyObject(myObject);
    }
}
import {Component} from '@angular/component';
import {MyObject} from '../models/my-object.model';
import {ObjectTransferService} from '../service/object-transfer.service';

@Component({
  ...
})
export class ChildComponent {

    constructor(private objectTransferService: ObjectTransferService){
         objectTransferService.objectSource$.subscribe(
         res => console.log('details', res),
         err => console.log('err' ,err));.
    }
}