有一个奇怪的问题,复选框加载了id&值,但没有被点击。也没有显示错误。
<button [popover]="columnConfigJobDetails"><span class="icon-cog"></span></button>
<popover-content #columnConfigJobDetails [closeOnClickOutside]="true">
<ng-container *ngFor='let col of columnDropdownStates'><form>
<label *ngIf='col' class="checkbox ">
<input type="checkbox" id={{col.field}} [checked]="col.visible"
name={{col.header}} (change)="onColumnChange($event)"/>
<span class="checkbox__input"></span>
<span class="checkbox__label">{{col.header}}</span>
</label></form>
</ng-container>
</popover-content>
我的Angular/typescript代码看起来像一个对象数组。
this.columnDropdownStates -:
0: {header: "Name", field: "name", visible: true}
1: {header: "Devices Enabled", field: "enabledDeviceNumber", visible: true}
2: {header: "Description", field: "description", visible: true}
新的更新-我确实得到了这个错误,不确定它意味着什么通过
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'ngIf: undefined'. Current value: 'ngIf: true'. It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?
有两种可能的修复方法,
-
如果在
ngOnInit()
上初始化或分配*ngIf
值,则必须将其移动到ngAfterViewInit()
,因为此时更改检测在ngOnInit((上不起作用。另一个原因是,在大多数情况下,您的视图可能没有在ngOnInit((中初始化。 -
如果您使用的是Angular版本的8以上版本,您可能需要在创建
@ViewChild
时设置一个静态标志,因为它是v8中的强制性标志。例如,@ViewChild(TemplateRef,{static:}(TemplateRef:TemplateRef
真值或假值取决于以下情况,
如果您正在ngOnInit
中访问ViewChild
,则为{ static: true }
如果您在ngAfterViewInit
中进行访问,则为{ static: false }
。这也应该用于使用NgIf, NgFor, NgSwitch
或其他结构指令的场景。
注意:在Angular 9中,静态标志默认为false。
有关更多详细信息,请参阅本次官方讨论。