簡體   English   中英

如何在Angular中獲取結構指令的ElementRef

[英]How to get ElementRef of structural directive in Angular

我正在嘗試創建一個相當基本的指令,它可以根據用戶權限隱藏(從 DOM 中刪除)、顯示或顯示和禁用其中的內容。

根據角度指南,我應該能夠做類似的事情來修改指令中的內容。

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

@Directive({
  selector: '[appHighlight]'
})
export class HighlightDirective {
    constructor(el: ElementRef) {
       el.nativeElement.style.backgroundColor = 'yellow';
    }
}

但是,我在訪問指令的內部內容時遇到問題。 這需要是一個結構指令,以便能夠從 DOM 中刪除內容,但是當我將其設為結構指令時,ElementRef 僅返回包含 ng 綁定的 HTML 注釋元素,它不會返回實際內容。

當我將此作為非結構指令進行測試時,它返回實際內容。

如何訪問結構指令的內部內容?

我想你把它們混在一起了。

結構指令是用於操作 DOM 本身的指令:它可以根據條件附加或刪除 DOM 的整個部分。

屬性指令是用於更改 DOM 元素的指令。 它可以改變它的樣式,但它不能從 DOM 中刪除它(但可以用 CSS 隱藏它)。

他們有一個專門的目的,不能(好吧,不應該)嘗試做對方應該做的事情。 由於它們的用途,它們也有不同的語法。

如果您查看此 stackblitz,您將看到兩者之間的區別:一個可以顯示元素引用(屬性),另一個僅顯示 HTML 注釋(結構)。

結構指令在 HTML 中的保留空間中使用,並且只知道該空間。

如果您希望獲得具有結構指令的元素的元素引用,則需要使用注釋的nextElementSibling來獲取它。

但話又說回來,看看閃電戰,親眼看看吧!

嘗試這個

constructor(private elementRef: ElementRef) {}

ngAfterViewInit() {
    this.elementRef.nativeElement.style.backgroundColor = 'yellow';
}

有可能像你做的那樣抓住它。 但是你只是像這樣移動了 ngOnInit 中的操作。

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

@Directive({
   selector: '[appHighlight]' 
})
export class HighlightDirective implements OnInit{
    constructor(el: ElementRef) { }

    ngOnInit() {
       this.el.nativeElement.style.backgroundColor = 'yellow';
    }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM