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

凯乌斯

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

这是我的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?
  }
}

您可以像平常一样使用输入。初始化所有视图后,通常会在ngAfterViewInit中进行DOM操作,但由于会设置icon属性,并且您没有尝试访问的ViewChildren,因此它也可能会在ngOnInit中工作。

HTML:

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

这是指令本身(角度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);
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在angular2模板中对管道(|)使用'=='吗?

我可以动态更改angular2中的templateUrl吗?

我可以在宿主元素中覆盖指令的宿主操作吗?

Angular2,HostListener,如何定位元素?我可以根据课程定位吗?

如何在angular2中的父组件中访问子组件HTML元素值?

Angular2 +中动态渲染输入元素的指令

我可以在ReactJS中包含原始元素的子元素吗?

我可以在Angular2中的RXJS中的“ subscribe()”之前捕获某些错误吗?

我可以在Angular2中执行此操作吗(子路线中的子路线)

您可以在Angular 2中使用独立指令吗?

我可以在angular2中返回原始json响应吗

我可以使用angular2组件中的EventEmitter传递变量吗?

我可以从管道调用Angular2管道吗?

Angular2我可以得到ngFor的数量吗?

我可以以编程方式在自定义指令中应用Angular验证指令吗?

我可以在Angular 2+中访问自定义ControlValueAccessor的formControl吗?

Angular2从父级访问子组件中的方法

访问angular2中的任意子级

如何在Angular2中访问HTML视频元素

访问Angular2模板中的特定数组元素

无法访问 angular2 中的 dom 元素

我可以在自定义AngularJS指令中访问已编译的节点数据吗?

我在Angular2中需要构造函数体吗?

setInterval()无法访问Angular2中的指令函数的问题

Angular2 RC6管道。我可以在与组件相同的.ts文件中声明管道吗?

您可以在Angular中转换为子指令吗?

Angular2 beta中的DynamicComponentLoader:“元素上没有组件指令”

Angular 2+ - 我可以制定一个使用路由器导航的指令吗?

angular2 ngfor 子组件元素