ExpressionChangedAfterItHasBeenCheckedError:使用Float检查表达式后,表达式已更改

时间:2019-06-30 06:58:46

标签: angular

ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'width: 93.7598541666%'. Current value: 'width: 93.7604513889%'.
    at viewDebugError (core.js:17871)
    at expressionChangedAfterItHasBeenCheckedError (core.js:17859)
    at checkBindingNoChanges (core.js:18059)
    at checkNoChangesNodeInline (core.js:27637)
    at checkNoChangesNode (core.js:27624)
    at debugCheckNoChangesNode (core.js:28228)
    at debugCheckDirectivesFn (core.js:28156)
    at Object.eval [as updateDirectives] (AppComponent.html:101)
    at Object.debugUpdateDirectives [as updateDirectives] (core.js:28145)
    at checkNoChangesView (core.js:27523)

我收到上述错误,但代码仍然继续

<div [ngStyle]="{
                  'margin-left':task.getFrontMargin(dayStart, hourResolution)*100+'%',
                  'width':task.getWidthPercent(dayStart, hourResolution)*100+'%'
                }" 
     class="flag" [ngClass]="task.type">
</div>

1 个答案:

答案 0 :(得分:0)

当我们在开发人员模式下以角度工作时,会发生这种错误,因为在开发人员模式下,角度执行两次检查以确认该属性是否具有与上一次检查相同的值。

现在,由于您的宽度根据getWidthPercent()的不同而有所变化,因此可以更改角度检查之间的宽度。这会提示错误。

要删除它,您可以使用setTimeOut()方法在ngOnInit()方法中设置宽度 通过这种方式 - 使用打字稿中的本地引用获取选定的div,并在ngOnInit方法内部使用

    @ViewChild('localReference') private element: ElementRef;

    ngOnInit() {
        setTimeOut(()=> {
            element.nativeElement.style.width = task.getWidthPercent(dayStart, 
            hourResolution)*100
        });
    }