基本上我通过传递一些数据来创建多个div。并尝试根据某些条件隐藏相同的div。
它正在创建多个div,但无论条件如何,它都会隐藏所有div。
如果我通过" on:true"对于一个div,它隐藏了所有div。这可能是因为我在所有元素上运行的forEach循环。但不知道如何解决它。
这是我的打字稿代码--->
export class ShowDataComponent implements OnInit {
@ViewChildren('notification') private el: QueryList<ElementRef>;
this.showData= arrayData;
ngAfterViewInit() {
for (let i = 0; i < this.showData.length; i++){
this.on = this.showData[i].on;
this.duration = this.showData[i].duration;
if(this.on){
this.el.forEach((element)=>{
const htmlElement = element.nativeElement as HTMLElement;
setTimeout(() => htmlElement.setAttribute("style", "display:none;"), this.duration);
});
}
}
}
}
&#13;
这是我的HTML代码---&gt;
<div *ngFor="let n of showData">
<div #notification class="show-top-bar" style="display: block;">
{{n.message}}
</div>
</div>
&#13;
答案 0 :(得分:0)
它隐藏了所有div,因为你在evaluate.cpp
之后放置了forEach
,这意味着只需要 showData 数组中的一个项目 >设为真。
答案 1 :(得分:0)
首先,你不应该自己处理DOM,这是框架的工作。如果你不使用框架,那么拥有一个框架有什么意义呢?
现在我不理解您的代码,因为您没有声明on
类成员,并且您的代码是为了隐藏所有div。
所以我假设你的元素有条件,称为on
,因为它似乎与你期望的最接近。
从HTML开始:
<div *ngFor="let n of showData">
<div *ngIf="n.on" class="show-top-bar" style="display: block;">
{{n.message}}
</div>
</div>
首先将条件放在元素的on
属性上。接下来,将所有值设置为true以显示所有值,并创建一个值数组以供稍后使用:
constructor() {
this.referenceArray = this.showData.map(n => ({id: n.id, on: n.on}));
for (let n of this.showData) {
n.on = true;
}
}
最后,在超时后将所有属性设置为其初始值:
ngAfterViewInit() {
setTimeout(() => {
for (let n of this.showData) {
n.on = this.referenceArray.find(rn => rn.id === n.id).on;
}
});
}