无法读取未定义的 Angular 6 的属性“nativeElement”

SjV*_*nyk 5 typescript angular-directive angular

我正在尝试为我的应用程序创建一个自定义 Spinner 组件,所以我创建了

spinner.component.ts

export class SpinnerComponent implements AfterViewInit {

    @ViewChild("spinner") spinner: ElementRef;

    constructor() { }

    ngAfterViewInit(): void {
        this.spinner.nativeElement.style.display = "none";
    }

    public show = (): void => { this.spinner.nativeElement.style.display = "block"; };

    public hide = (): void => { this.spinner.nativeElement.style.display = "none"; };

}
Run Code Online (Sandbox Code Playgroud)

spinner.component.ts

<img #spinner src="assets/images/dotSpinner.gif" class="loading"/>
Run Code Online (Sandbox Code Playgroud)

我试图在我的其他组件中控制这个微调器,比如

样本.component.ts

import { SpinnerComponent } from "../spinner/spinner.component";

export class SimpleComponent {

    private spinner: SpinnerComponent = new SpinnerComponent();

    constructor() {}

    actionHandler = (data: any): void => {
        this.spinner.show();
        this.clientActionService.subscribe(
            data => {
                this.spinner.hide();
                this.clientAction = data;
            },
            err => {
                this.spinner.hide();
            }
        );
    }

}
Run Code Online (Sandbox Code Playgroud)

但我收到错误 ERROR TypeError: Cannot read property 'nativeElement' of undefined at SpinnerComponent.show

Viv*_*mar 0

如果你想要解决方法

<img
    [ngStyle]="{'display': displayVal}"
    src="assets/images/dotSpinner.gif"
    class="loading"/>
Run Code Online (Sandbox Code Playgroud)

打字稿代码

display = "none";
public show = (): void => { this.displayVal = "block"; };
public hide = (): void => { this.displayVal = "none"; };
Run Code Online (Sandbox Code Playgroud)