2017-06-21 74 views
4

我有一个角度2项目,我正在使用PrimeNG。 我正在使用一个特殊的标签,其中有很多自定义属性,这些标签的属性始终相同。 我想要外部化这些属性,并创建了一个自定义指令,用于添加我需要的所有属性。 问题是,其中一些属性不是本机的,也许它们不被识别。我得到无法执行对 '元素' 的setAttribute“错误”: '[myCustomAttribute]' 不是一个有效的属性名称Angular2在标签中插入自定义属性与指令

这是我的指令:

@Directive({ 
 
    selector: '[def-calendar]' 
 
}) 
 
export class DefaultCalendarDirective { 
 

 
    constructor(private _elRef: ElementRef, private _renderer: Renderer2) { 
 
    } 
 

 
    ngOnInit() { 
 
    this._renderer.setAttribute(this._elRef.nativeElement, '[yearRange]', '1900:2100'); 
 
    } 
 
}

任何人都知道我该如何修复它? 我不知道是否有办法复制字符串等元素并操纵字符串,添加我的属性

谢谢 Fa brizio

回答

1

您不能使用renderer.setAttribute(...)来设置不属于您使用的本机HTML元素的属性。
yearRange甚至不是任何原生HTML元素的准确属性。它应该以它正确地设定值来声明为类指令的输入:

@Directive({ 
    selector: '[def-calendar]' 
}) 
export class DefaultCalendarDirective implements OnInit { 

    @Input() yearRange: string = '1900:2100'; 

    constructor() { 
    } 

    public ngOnInit() {} 
} 

您还可以通过它传递一个字符串改变输入值(或者你也可以使用绑定代替)时你在一个元素上使用指令。

<someElement def-calendar yearRange="1900:2100"></someElement> 
+0

喜的方法,并感谢答复。所以我不需要设置值,我需要操纵标签添加一些属性。 让我解释: 我有这个 ** ** 和我希望有这样的: **

** –

+0

您不能”添加“属性。您可以使用输入,也可以使用要添加指令的元素的默认属性(例如,在按钮时禁用或设置值)。 –

+0

根据你写的内容,你需要在你的指令类中定义输入'dateFormat','monthNavigator'和'yearRange',以使其工作。我没有看到任何其他方式来做到这一点。 –

0

我们可以使用的setAttributeRenderer2

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

@Directive({ 
    selector: '[DirectiveName]' 
}) 
export class DirectiveNameDirective { 
constructor(public renderer : Renderer2,public hostElement: ElementRef){} 
ngOnInit() { 
     this.renderer.setAttribute(this.hostElement.nativeElement, "data-name", "testname"); 
     } 
    } 
+0

嗨,我试过你的解决方案,但我得到这个错误: **“无法执行'元素''setAttribute':'数据名'不是有效的属性名称。“** –

+0

Hi @FabrizioP数据名称之间有空格,请删除空格并检查,我将更改我的答案。 –

+0

嗨,谢谢,如果我设置数据名称的作品,但我需要添加*** ngIf **,这不起作用 –

相关问题