【问题标题】:Angular HTMLElement not working from service but ok without itAngular HTMLElement 无法从服务中工作,但没有它就可以
【发布时间】:2020-05-10 12:42:35
【问题描述】:

我在使用某些代码时遇到了一些问题,但仅在从服务调用时才出现。

在 app.component.html 我有:

<div id="wrapper"></div>

当我运行这段代码时:

this.targetElement = document.getElementById('wrapper') as HTMLElement;

来自 app.component.ts 是有效的,但我正在尝试将其移动到服务中,所以我已经这样做了:

import { Injectable } from '@angular/core';
import * as mylib from '../../assets/index.js';

@Injectable({
  providedIn: 'root'
})
export class ViewerService {

  window: any = window;
  targetElement: HTMLElement;
  viewer: any;

  constructor() { }

  viewerInit() {
    this.targetElement = document.getElementById('wrapper') as HTMLElement;
    return this.targetElement;
  }

}

然后当我从 app.component.ts 调用服务时...

ngOnInit() {
  this.viewerService.viewerInit();
}

从服务中代码将不起作用...

我该如何解决这个问题?

【问题讨论】:

  • 创建一个 stackblitz 示例

标签: angular typescript angular9


【解决方案1】:

ngOnInit 早了,把你的逻辑移到AfterViewInit 钩子上。

public ngAfterViewInit(): void {
  this.viewerService.viewerInit();
}

如果可以将元素传递到服务中,您可以尝试下一个操作:

class AppComponent implements AfterViewInit {
  @ViewChild('wrapper') wrapper: TemplateRef<any>;

  public ngAfterViewInit(): void {
    this.viewerService.viewerInit(this.wrapper.elementRef.nativeElement);
  }
}

它的模板是这样的:

<div #wrapper></div>

还有这样的服务:

export class ViewerService {

  window: any = window;
  targetElement: HTMLElement;
  viewer: any;

  constructor() { }

  viewerInit(target?: HTMLElement) {
    if (target) {
      this.targetElement = target;
    }
    return this.targetElement;
  }
}

【讨论】:

  • 我在 ngAfterViewInit() 中遇到了同样的问题,所以它一定是别的东西
  • 嗯.. 看起来太早了,那我们试试ngAfterContentInit,然后ngAfterContentChecked。您也可以选择将元素传递到this.viewerService.viewerInit(this.element) 之类的服务中吗?
  • 我已经更新了答案,以防您是否可以接受传递元素。
  • 仍然是同样的问题...也尝试了 ngAfterContentInit 但仍然没有。我可能不得不忘记将代码放在服务中的想法
  • viewerInit(this.element) 怎么样?这对你来说是一个选择吗?
猜你喜欢
  • 2019-11-06
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多