如何在Angular 6中使用Observables代替document.querySelector

时间:2018-11-08 08:36:25

标签: angular rxjs observable reactive-programming getelementbyid

我需要在Angular 6中使用Observables而不是document.querySelector。我的代码现在看起来像这样:

onInputChange(result: string) {

const x = document.querySelector('.x') as HTMLElement;

if (result[0] === '4') {
  x.style.backgroundColor = '#ffffff';


} else if (result[0] === '5' && result[1] === '5') {
  x.style.backgroundColor = '#000000';


} else if (result[0] === '_') {
  x.style.backgroundColor = '#AFB8BD';

}

result = result.replace(new RegExp('u', 'g'), 'x');
(<HTMLInputElement>document.getElementById('someInput')).value = result;
}

实际上,主要思想是更改有关“结果”输入的第一个数字的背景颜色 有人可以帮助我使用Observables吗?我是Frontend的新手,很抱歉这个问题

2 个答案:

答案 0 :(得分:0)

您遇到的问题是,我们真的不知道您的组件是什么

Angular为您提供了两种与组件和事件进行交互的方式

const yourEvent = fromEvent(button, 'click');

示例:

    <input type="text" #comp (keyup)="onChange(comp.value)"/>

答案 1 :(得分:0)

基本上我认为您的问题不会围绕可观察的问题。您希望更改元素的颜色以响应其他元素操作(让我们假设单击是因为您的代码段中未提供此操作)

只需使用一些标准的onClick事件监听器即可设置其他组件样式:

<button (click)="onClick()">
<div [class]="classFromController"

并在控制器中:

onClick() {
  if (/* any logic you wish */) {
    this.classFromController = 'black';
  } else if (/* other logic */) {
    this.classFromController = 'white';
  }
}

在您的CSSs

.black {
  backgroundColor = '#ffffff';
}
.white {
  backgroundColor = '#000000';
}

避免使用内联样式,因为它们被认为是糟糕的编码样式并且易于避免。

如果出于某些特殊原因必须使用可观察变量,请考虑使用Observable.fromEvent(),如下所示:

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-fromEvent