Add attribute with renderer using a directive

后端 未结 2 1969
暖寄归人
暖寄归人 2021-02-19 02:29

I want to achieve extending an HTML tag with an attribute but encapsulate this with an angular 2 component.

Let\'s assume the original markup using my Angular 2 componen

2条回答
  •  借酒劲吻你
    2021-02-19 02:40

    If I understood you right.. your idea is good, should work!

    See this plunker: https://plnkr.co/edit/YctUpK9r9AqIk0D1qvgZ?p=preview

    EDIT: updated to use Renderer2

    import {Component, Directive, NgModule, ElementRef, Renderer2, ViewChild} from '@angular/core'
    import {BrowserModule} from '@angular/platform-browser'
    
    @Directive({
      selector: '[foo]'
    })
    export class MyFancyDirective {
    
      constructor (private _elRef: ElementRef, private _renderer: Renderer2) { console.log('!'); }
    
      ngOnInit() {
        this._renderer.setAttribute(this._elRef.nativeElement, 'another-fancy-attribute', 'HERE I AM !!');
      }
    
    }
    
    @Component({
      selector: 'my-app',
      template: `
        

    Hello {{name}}

    `, }) export class App { @ViewChild('header', { static: true }) header: ElementRef; name:string; constructor() { this.name = 'Angular2' } headerClicked() { console.dir(this.header.nativeElement.attributes['another-fancy-attribute'].value); } } @NgModule({ imports: [ BrowserModule ], declarations: [ App, MyFancyDirective ], bootstrap: [ App ] }) export class AppModule {}

提交回复
热议问题