【问题标题】:Angular2+ whole DOM flicker on component load ngForAngular2 +整个DOM在组件加载ngFor上闪烁
【发布时间】:2020-06-17 10:45:25
【问题描述】:

当用户单击一个项目时,它会将其添加到列表中。为了呈现我正在使用 ngFor 的列表。在用户将第一个项目添加到选定列表后,整个屏幕/DOM 闪烁(一切都消失并重新出现)。当用户随后将第二个元素添加到所选数组时,不会发生这种情况

这是我的 ngFor 循环:

<div
  *ngFor="let sel of selected"
    class="cw-selected-list-item"
 >
 <div class="cw-selected-name t4">{{ sel.id }}</div>
   <app-checkbox class="cw-selected-r-tick"></app-checkbox>
   <app-checkbox class="cw-selected-rw-tick"></app-checkbox>
 </div>

当我注释掉我的应用复选框组件时,不会出现闪烁。下面是我的 app-checkbox 组件

TS

import { Component, OnInit, Input, Output, EventEmitter } from "@angular/core";
@Component({
 selector: "app-checkbox",
 templateUrl: "./checkbox.component.html",
 styleUrls: ["./checkbox.component.scss"],
})
export class CheckboxComponent implements OnInit {
 @Input() checked = false;
 @Output() checkChanged = new EventEmitter();

constructor() {}

ngOnInit(): void {}

toggleChecked() {
  this.checked = !this.checked;
  this.checkChanged.emit(this.checked);
 }
}

HTML

<div
 class="checkbox clickable"
 [ngClass]="{ 'checkbox-active': this.checked }"
 (click)="toggleChecked()"
>
<img
 class="checkbox-image"
 [ngStyle]="{ opacity: !this.checked ? 0 : 1 }"
 src="assets/buttons/tick.png"
/>

任何帮助将不胜感激

编辑

当用户点击它时,它只是调用这个函数

  selected = [];

  public addToSelected(item: Document) {
   this.selected.push(item);
  }

HTML

    <div
      *ngFor="let hit of hits"
       class="aisd-hit t4"
       [ngClass]="{ 'hit-disabled': this.isAlreadySelected(hit) }"
       (click)="
          this.isAlreadySelected(hit) ? undefined : this.addToSelected(hit)
        "
     >

isAlreadySelected 函数

  isAlreadySelected(doc: Document) {
   return this.selected.includes(doc);
  }

【问题讨论】:

  • 请提供对selected 数组(或复制器)进行更改的所有代码

标签: javascript angular typescript


【解决方案1】:

我找到了!

它是通过 .woff2 文件在本地导入我的字体,当视图初始化后创建新组件时,它会创建完整的 DOM 刷新。

希望这对某人有所帮助

导入示例:

  url(/assets/fonts/opensans/mem8YaGs126MiZpBA-UFUZ0bbck.woff2)
  format("woff2");

【讨论】:

  • 我不明白您为解决问题所做的更改?
  • 我正在通过我的资产文件夹中的本地文件加载我的字体(供离线 Electron 使用)更改为从 Google 远程加载字体解决了这个问题。不知道为什么,但从本地加载导致 DOM 闪烁/刷新 @igg
猜你喜欢
  • 2016-05-26
  • 2018-12-05
  • 2015-05-23
  • 2015-11-28
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
相关资源
最近更新 更多