gpt4 book ai didi

Angular 2 - 没有响应将对象发送到具有 Observable 服务的 组件

转载 作者:行者123 更新时间:2023-12-05 04:11:15 25 4
gpt4 key购买 nike

我正在尝试通过 <router-outlet></router-outlet> 从父组件、对象到子组件进行服务传递。 .我使用文档来指导我 https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service ,但是当我尝试运行该应用程序时,我没有收到任何错误或输出。

服务代码:

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

父组件:

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

来自 <router-outlet></router-outlet> 的子组件:

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

更新(已回答)

Changed new Subject<MyObject>() to new BehaviorSubject<MyObject>(<MyObject>{})

我认为未收到回复的原因是在我订阅后主题没有更新为新值。使用 BehaviorSubject 允许使用最新值更新观察者,如此处所述,Angular 2 - Behavior Subject vs Observable? .

最佳答案

时间问题。 ParentComponentngOnInit() 中的事件在 ChildComponent 的构造函数执行之前发出,因此订阅发生得太晚了。

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

关于Angular 2 - 没有响应将对象发送到具有 Observable 服务的 <router-outlet> 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43027422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com