Angular 获取ObservableInput值并避免订阅它
我在角度分量中得到了一个ObservableInput,还有一个Subject按钮,按下它,我得到输入值,调用另一个observable,然后订阅它以使用返回的数据 但问题是,每当这个输入发生变化时,它都会触发(onClick)函数,因为我使用的是switchMap,它会自动订阅输入,所以不需要单击就可以触发(onClick)函数 我怎样才能防止这种情况发生Angular 获取ObservableInput值并避免订阅它,angular,rxjs,Angular,Rxjs,我在角度分量中得到了一个ObservableInput,还有一个Subject按钮,按下它,我得到输入值,调用另一个observable,然后订阅它以使用返回的数据 但问题是,每当这个输入发生变化时,它都会触发(onClick)函数,因为我使用的是switchMap,它会自动订阅输入,所以不需要单击就可以触发(onClick)函数 我怎样才能防止这种情况发生 class SomeComponent { @ObservableInput @Input() name$: Observable&
class SomeComponent {
@ObservableInput @Input() name$: Observable<string>;
private clickSubject = new Subject<Event>();
constructor(private _someService: Service) {
this.clickSubject.pipe(
switchMap(() => this.name$),
switchMap((name) => this._someService.getUserByName(name))
).subscribe((data: UserData) => {
// Work around with data here.
});
}
onUserClick(): void {
clickSubject.next();
}
}
class组件{
@ObservableInput@Input()name$:可观察;
private clickSubject=新建主题();
构造函数(私有服务:服务){
点击subject.pipe(
switchMap(()=>this.name$),
switchMap((名称)=>this.\u someService.getUserByName(名称))
).subscribe((数据:UserData)=>{
//在这里处理数据。
});
}
onUserClick():无效{
单击subject.next();
}
}
我读到我可以使用RxJS中的“merge()”,但我似乎找不到一种方法来让它工作mergeMap
还返回一个可观察值,但订阅了不需要的名称$
我只需要获取当前名称$value而不订阅它,这样每当它更改时,它不会触发subscribe块上的任何内容
谢谢。我不认为这里需要将
名称$
设置为@observeInput
。如果它的唯一用途是用作HTTP请求的参数,那么它可能只是一个普通的角度@Input
属性。然后可以使用this.name
在开关映射中访问它
类SomeComponent实现OnInit{
Input()名称:string;
private clickSubject=新建主题();
ngOnInit(私人服务:服务){
点击subject.pipe(
switchMap(()=>this.\u someService.getUserByName(this.name))
).subscribe((数据:UserData)=>{
//在这里处理数据。
});
}
onUserClick():无效{
单击subject.next();
}
}
问题是,我需要这个属性是一个可观察的属性,因为它会动态地更改,并在组件未被破坏时侦听此更改。这和使用ngOnChange是一样的。由于我唯一的支持是单击,出于某种原因,即使正常输入更改了其值,它也不会被分配给this.name
。我不明白。那么,您是说子级中的变量this.name
包含旧值,即使已使用[name]=“someVar”
绑定在父级中设置了新值?是的,即使我将其作为[name]=“someVar”
传递,它也不会在组件中更新。我读到有人建议订阅输入。有些人在输入时使用行为主体。