Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 获取ObservableInput值并避免订阅它_Angular_Rxjs - Fatal编程技术网

Angular 获取ObservableInput值并避免订阅它

Angular 获取ObservableInput值并避免订阅它,angular,rxjs,Angular,Rxjs,我在角度分量中得到了一个ObservableInput,还有一个Subject按钮,按下它,我得到输入值,调用另一个observable,然后订阅它以使用返回的数据 但问题是,每当这个输入发生变化时,它都会触发(onClick)函数,因为我使用的是switchMap,它会自动订阅输入,所以不需要单击就可以触发(onClick)函数 我怎样才能防止这种情况发生 class SomeComponent { @ObservableInput @Input() name$: Observable&

我在角度分量中得到了一个ObservableInput,还有一个Subject按钮,按下它,我得到输入值,调用另一个observable,然后订阅它以使用返回的数据

但问题是,每当这个输入发生变化时,它都会触发(onClick)函数,因为我使用的是switchMap,它会自动订阅输入,所以不需要单击就可以触发(onClick)函数

我怎样才能防止这种情况发生

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”
传递,它也不会在组件中更新。我读到有人建议订阅输入。有些人在输入时使用行为主体。