【问题标题】:Get an element by ID in Angular 7 component (TypeScript) and use its attributes in component在 Angular 7 组件(TypeScript)中按 ID 获取元素并在组件中使用其属性
【发布时间】:2019-06-14 23:01:42
【问题描述】:

我们可以使用标准的 Javascript 方法通过它的 id 来获取元素:

document.getElementById("dataBlock").innerHTML = "";

然而,在 Angular 中,引用元素的首选方式是使用模板引用变量:

<div #dataBlock></div>
<button (click)="dataBlock.innerHTML = ''">Clear content</button>

该变量还允许在 @ViewChild 的帮助下访问代码中的元素:

@ViewChild("dataBlock") block: ElementRef;

clearContent() {
  this.block.nativeElement.innerHTML = "";
}

我的问题是,上述代码对 Angular 应用程序的性能和内存有何影响。

【问题讨论】:

  • 你是不是特别想问这行代码this.block.nativeElement.innerHTML = "";的影响/性能?
  • my question,我问了一个类似的问题,但运气不佳。
  • @JonasPraem 我一般都在问。没有特别要求那条线。
  • @dince12,我读到的和你在问题中提到的一样,这就是我在这里问的原因。

标签: angular html typescript


【解决方案1】:

虽然这两行代码的结果基本上是在做同样的事情。使用“Angular 方式”的原因是 Angular 应用程序并不总是要在浏览器中运行。例如,您可以在无法直接访问 DOM 的 web worker 中运行 Angular。

另一个原因是让组件引用特定元素而不是每次需要访问元素时都执行 getElementById 更简洁。

我的问题是,上述代码对 Angular 应用程序的性能和内存有何影响。

Angular 被编译为 javascript,因此在 Angular SPA 中这不会对性能产生任何大的影响。如果你想测量准确的性能/内存使用情况,我建议使用像lighthouse 这样的扩展。 Angular 中的内存和性能优化与其说是使用 Angular 框架,不如说是关于如何划分模块、如何延迟加载以及 SPA 中最重要的——初始加载时间。我建议坚持使用 Angular 框架,让 Angular 负责编译优化。在 ViewChild 上使用 getElementById 不会保证任何可测量的时间。

制作了一个 stackblitz 来测量执行 this.block.nativeElement.innerHTML = ""; 所需的时间 - 结果为 0 毫秒。

【讨论】:

  • 谢谢乔纳斯,不,我并不是要说或要求这个特定的行 this.block.nativeElement.innerHTML = "" 我一般问它。意味着如果我在我的应用程序中如此频繁地使用它可能会花费多少。
  • 我真的很想帮助你,但这是一个非常广泛的问题
  • 是的,这确实是一个非常广泛的问题。我处于项目的初始阶段,并希望考虑这些点以避免项目后期出现性能和/或内存问题。非常感谢您的帮助。
  • 如果您使用的是 Angular 框架,请遵守框架指南。如果您想使用原始 javascript,我建议您避免使用 React 或 Angular 等框架。如果你混合搭配,你会得到奇怪的比赛条件和行为。
  • 感谢您的好建议,我同意我们必须遵循框架指南。
猜你喜欢
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2019-05-12
  • 2016-10-19
  • 2020-03-06
  • 2019-08-03
  • 2020-06-18
  • 2017-08-04
相关资源
最近更新 更多