如何从 Typescript 更新 HTML 元素的 属性(如颜色)

How do I update a property (like the color) of an HTML element from Typescript

我页面的 HTML 部分有以下内容

<ion-row padding>
    <ion-input [(ngModel)]="addressSearchfield" name="addressSearch'></ion-input>
</ion-row>

并且我想更改页面 TS 部分中离子输入的颜色。

我可以用这样的代码获取存储在其中的值

addressSearchfield: string;
//...
console.log (this.addressSearchfield);

我假设我可以像这样引用元素及其属性:

addressrow: any;
// ...
this.addressSearch.color = '#FFFFFF';

但我收到错误 Cannot set property 'color' of undefined

我应该怎么做?

好的,Heretic Monkey 的回答在技术上是可行的,

document.querySelector('[name="addressSearch"]').style.color = '#FFFFFF';

但它在我的编辑器中给了我一个 red-squiggle 样式元素

但是,基于此进行一些实验:

addressSearch: HTMLElement;
// ...
this.addressSearch= document.querySelector('[name="addressSearch"]');
this.addressSearch.style.backgroundColor = '#FFFFFF';

使用更快乐的编辑器提供相同的效果。

更 "Ionic way" 的做法是使用 CSS 属性 。就像您在 the docs 中看到的一样,ion-input 有一个 CSS 属性 设置 color:

CSS Custom Properties

Name    | Description
--------|------------------------
...
--color | Color of the input text
...

因此您可以在 variables.scss 文件中定义一个新的 CSS 属性,如下所示:

:root {

  // ...

  --input-custom-color: blue; // default color for the input

}

然后在您的页面中,设置输入颜色以使用 CSS 属性:

// my-page.page.scss

[name="addressSearch"] {
  --color: var(--input-custom-color);
}

那只会使用默认颜色。所以现在下面的代码是改变组件的颜色(或者实际上,CSS 属性 的值):

// Angular
import { Component, Inject } from "@angular/core";
import { DOCUMENT } from '@angular/platform-browser';

// Ionic
import { DomController } from '@ionic/angular';

@Component({
  selector: "app-my-page",
  templateUrl: "my-page.page.html",
  styleUrls: ["my-page.page.scss"]
})
export class MyPage {

  constructor(
    private domCtrl: DomController,
    @Inject(DOCUMENT) private document
  ) {}

  public changeColor(aColor: string): void {

    // Tell Ionic we're going to write in the DOM
    this.domCtrl.write(() => {

      // Update the value of the CSS property
      this.document.documentElement.style.setProperty('--input-custom-color', aColor);
    });
  }
}

现在您可以执行类似 this.changeColor('green'); 的操作,我们将在视图中更新输入的颜色 :)

这样做的最大好处是,您可以通过更新 CSS 属性(甚至位于您应用程序的任何其他页面中的输入)来更改所有输入,而不是直接访问每个 DOM 元素更新其样式。

请注意,同样的操作适用于任何样式 - Ionic 使用 CSS 属性(如 --color 还是仅使用 [=15] 都没有关系=] CSS 属性(像这样:color: var(--input-custom-color);