Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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 fromEvent()未触发ViewChild上的observable?_Angular_Rxjs6 - Fatal编程技术网

Angular fromEvent()未触发ViewChild上的observable?

Angular fromEvent()未触发ViewChild上的observable?,angular,rxjs6,Angular,Rxjs6,我在app.component.html中有以下内容 并调整我的obervable声明如下:const observable=fromEvent(this.myInput.nativeElement,'input') 我可以看到,在viewChild中,我传递的是输入的原生html元素,而不是整个文档,该文档应该根据文档工作: fromEvent接受作为第一个参数的事件目标,它是一个具有注册事件处理程序函数的方法的对象 所以我不确定为什么在这种情况下,可观察的东西不能创造。有什么想法吗 编辑遵

我在app.component.html中有以下内容

并调整我的obervable声明如下:
const observable=fromEvent(this.myInput.nativeElement,'input')

我可以看到,在viewChild中,我传递的是输入的原生html元素,而不是整个文档,该文档应该根据文档工作:

fromEvent接受作为第一个参数的事件目标,它是一个具有注册事件处理程序函数的方法的对象

所以我不确定为什么在这种情况下,可观察的东西不能创造。有什么想法吗


编辑遵循@bryan60的示例并重构我自己的代码,我注意到了一些东西

在使可观察到后立即订阅具有预期行为:

  const observable = fromEvent(this.myInput.nativeElement, 'input').pipe(
    map(<InputEvent>(eventInfo) => eventInfo.target.value),
    debounceTime(500),
    distinctUntilChanged()
  ).subscribe(
    (evt) => console.log(evt)
  );
const observable=fromEvent(this.myInput.nativeElement,'input').pipe(
映射((eventInfo)=>eventInfo.target.value),
去BounceTime(500),
distinctUntilChanged()
).订阅(
(evt)=>console.log(evt)
);
但将其存储为var并在之后订阅不会:

  let observable = fromEvent(this.myInput.nativeElement, 'input').pipe(
    map(<InputEvent>(eventInfo) => eventInfo.target.value),
    debounceTime(500),
    distinctUntilChanged()
  );
  this.subscription = observable.subscribe(
    (evt) => console.log(evt)
  );
let observable=fromEvent(this.myInput.nativeElement,'input').pipe(
映射((eventInfo)=>eventInfo.target.value),
去BounceTime(500),
distinctUntilChanged()
);
this.subscription=observable.subscripte(
(evt)=>console.log(evt)
);

我仍然不知道为什么会这样。

代码按预期工作:也就是说。。。对于输入值的变化,还有很多其他的反应方式,它们都是更“角度”的方法(反应形式的值变化,ngModel on change)。我根据您的例子编辑了我的问题。这似乎是把它分解成一个可观察的声明,然后订阅失败了@布莱恩:不知道。仍然无法在stackblitz中重新创建。保存一个变量对我来说仍然有效。我想知道这是否只是一个版本问题。我使用的是Angular 6和rxjs6。不确定。在如何调用函数来构建可观察对象方面,看起来更像是一个逻辑错误,或者您可能以某种方式破坏了引用
@ViewChild('inp') myInput: ElementRef; 
  const observable = fromEvent(this.myInput.nativeElement, 'input').pipe(
    map(<InputEvent>(eventInfo) => eventInfo.target.value),
    debounceTime(500),
    distinctUntilChanged()
  ).subscribe(
    (evt) => console.log(evt)
  );
  let observable = fromEvent(this.myInput.nativeElement, 'input').pipe(
    map(<InputEvent>(eventInfo) => eventInfo.target.value),
    debounceTime(500),
    distinctUntilChanged()
  );
  this.subscription = observable.subscribe(
    (evt) => console.log(evt)
  );