简体   繁体   English

Angular Renderer2 - destroy()如何工作?

[英]How does Angular Renderer2 - destroy() work?

How does destroy() method of Angular Renderer2 work? Angular Renderer2的destroy()方法如何工作?

import { Directive, ElementRef, Renderer2, OnInit } from '@angular/core'

@Directive({
  selector: '[destroy]'
})

export class Destroy implements OnInit {
  constructor(private elRef: ElementRef, private renderer: Renderer2) {}

  ngOnInit(){
    const currentElement = this.elRef.nativeElement;
    const nextEl = this.renderer.nextSibling(currentElement);
    this.renderer.addClass(nextEl, 'red');
    this.renderer.destroy();
  }   


}

Here, I expect destroy() to do exactly what angular.io says: 在这里,我希望destroy()完全符合angular.io所说的:

Implement this callback to destroy the renderer or the host element.

Then I add these 2 lines after destroy() and setStyle method works for both elements. 然后我在destroy()之后添加这两行,并且setStyle方法适用于这两个元素。

  ngOnInit(){
    const currentElement = this.elRef.nativeElement;
    const nextEl = this.renderer.nextSibling(currentElement);
    this.renderer.addClass(nextEl, 'red');
    this.renderer.destroy();
    this.renderer.setStyle(currentElement, 'background-color', 'blue')
    this.renderer.setStyle(nextEl, 'background-color', 'blue')    
  }   

I expect the methods to not work after destroy because I expect the host element or renderer to be destroyed. 我希望这些方法在destroy之后不起作用,因为我希望主机元素或渲染器被销毁。

What am I missing? 我错过了什么?

Stackblitz example: Stackblitz示例:

https://stackblitz.com/edit/angular-82bgqz?embed=1&file=src/app/destroy.directive.ts https://stackblitz.com/edit/angular-82bgqz?embed=1&file=src/app/destroy.directive.ts

For a DOM Renderer, destroy() is an empty method that doesn't do anything: 对于DOM渲染器, destroy()是一个不执行任何操作的空方法:

destroy(): void {}

It's just a thin wrapper over the DOM APIs. 它只是DOM API的一个薄包装器。

The destroy hook is there in case you want to implement your own custom renderer where destroying it might make more sense. 如果你想要实现自己的自定义渲染器,销毁它可能会更有意义。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM