gpt4 book ai didi

angular - 我可以在 Angular2 的指令中访问子元素吗?

转载 作者:太空狗 更新时间:2023-10-29 17:22:39 24 4
gpt4 key购买 nike

我正在尝试创建一个指令,该指令在输入中接受一个 icon 属性,该属性将是图标名称。所以该指令在内部会尝试找到一个 span 元素,它将在其中应用一个类。我想知道这是否可以从应用于父级的指令中实现。还是我也必须为 child 创建指令?

这是我的 HTML 代码:

<div sfw-navbar-square sfw-navbar-icon>
<span class="mdi mdi-magnify"></span>
</div>

这是指令本身:

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

@Directive({
selector: '[sfw-navbar-square]'
})
export class NavbarSquareDirective {

// Here I'd like to define a input prop that takes a string
constructor(private el: ElementRef, private renderer: Renderer) {
this.renderer.setElementClass(this.el.nativeElement, 'navbar-square-item', true);
this.renderer.setElementClass(this.el.nativeElement, 'pointer', true);
this.renderer.setElementClass(this.el.nativeElement, 'met-blue-hover', true);
// Here I'd like to pass that string as a class for the span child element. Can I have access to it from here?
}
}

最佳答案

您可以像往常一样使用输入。当所有 View 都初始化时,DOM 操作通常在 ngAfterViewInit 中完成,但它也可能在 ngOnInit 中工作,因为将设置 icon 属性并且您没有任何您尝试访问的 ViewChildren。

HTML:

<div sfw-navbar-square [sfwNavbarIcon]="'my-icon'">
<span class="mdi mdi-magnify"></span>
</div>

这是指令本身(Angular 4):

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

@Directive({
selector: '[sfw-navbar-square]'
})
export class NavbarSquareDirective {

@Input('sfwNavbarIcon') icon:string;

constructor(private el: ElementRef, private renderer: Renderer2) {
this.renderer.addClass(this.el.nativeElement, 'navbar-square-item');
this.renderer.addClass(this.el.nativeElement, 'pointer');
this.renderer.addClass(this.el.nativeElement, 'met-blue-hover');
}

ngAfterViewInit() {
let span = this.el.nativeElement.querySelector('span');
this.renderer.addClass(span, this.icon);
}
}

关于angular - 我可以在 Angular2 的指令中访问子元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42715318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com