我正在使用
我正在尝试做什么
我有什么
我的HTML列表
连接点击事件的按钮
我不知道该怎么做
[phantomOp] =“myItems”[myOper] =“oper”
HTML
<div class="container">
<ul>
<li> Albums </li>
<li> Dates </li>
</ul>
</div>
<button (click)="addContainerAttributes"> Add Container Attributes </button>
点击按钮
后,我希望HTML看起来像什么<div class="container" [phantomOp]="myItems" [myOper]="oper">
<ul>
<li> Albums </li>
<li> Dates </li>
</ul>
</div>
TS
addContainerAttributes(){
// Not entirely sure what to put here
}
答案 0 :(得分:5)
添加在运行时动态添加的Angular特定标记将被Angular忽略。
只有在编译组件时,Angular才会处理像[phantomOp]="myItems" [myOper]="oper"
这样的绑定。通常(使用AoT),这是在部署应用程序之前。
How can I use/create dynamic template to compile dynamic Component with Angular 2.0?解释了如何在运行时编译组件。
您只需在组件中引入一个字段
即可isClicked:boolean = false;
静态地将其添加到您的元素
[phantomOp]="isClicked ? myItems : null" [myOper]="isClicked ? oper : null"
并在点击处理程序中
(click)="isClicked=true"
答案 1 :(得分:0)
最近我遇到了类似情况。我想动态地添加和删除FileInput上的capture
属性。现在,仅capture
属性和文件输入的存在将落入捕获模式,因此将值设为null或''对我不起作用。
这就是我最终使它起作用的方式。我使用了@ViewChild
和ElementRef
。在您的情况下,它将类似于:
<div #yourContainer class="container">
<ul>
<li> Albums </li>
<li> Dates </li>
</ul>
</div>
<button (click)="addContainerAttributes"> Add Container Attributes </button>
然后在TS
import { Component, ElementRef } from '@angular/core';
@Component({
selector: 'app-your-component',
templateUrl: './your-component.component.html',
styleUrls: ['./your-component.component.css']
})
export class YourComponent {
@ViewChild('yourContainer', {static:true}) yourContainer: ElementRef;
....
addContainerAttributes(){
// Not entirely sure what to put here
this.yourContainer.nativeElement.setAttribute('phantomOp', myItems);
this.yourContainer.nativeElement.setAttribute('myOper', oper);
}
// if you wish to completely remove the attribute dynamically
removeContainerAttributes(){
this.yourContainer.nativeElement.removeAttribute('phantomOp');
this.yourContainer.nativeElement.removeAttribute('myOper');
}
}