【问题标题】:Angular 4 Changes based on viewAngular 4 基于视图的更改
【发布时间】:2017-11-23 00:34:38
【问题描述】:

我有一个类似的 div

 <div [ngClass]="{'active' : isActive} [ngStyle]={top: topVar } >

isActive 和 topVar 是根据视图计算的,(如果内容溢出,内容是动态的)。

所以我在 ngAfterViewChecked 中计算它们。

这当然给了我这个错误:

Expression has changed after it was checked, previous value : "undefined". current value : '636px'.

我明白我做错了什么,我的问题是,如何做对?

(如果我根据组件视图计算变量,我需要ngAfterViewChecked --> 我需要再次detectChanged, 如果我每次都做 ChangeDetectorRef.detectChanges() --> 我会进入一个循环。 --> 我需要一个条件来阻止它。感觉很老套和错误。

【问题讨论】:

    标签: angular angular2-template angular2-directives angular2-animation


    【解决方案1】:

    将您的代码包装到 setTimeout 函数中。喜欢

    ngAfterViewInit(): void {
      setTimeout({...calculation});
    }
    

    【讨论】:

    • 嗯,和调用检测不一样吗?
    • 该错误表明您无法在实时循环方法中执行影响模型的操作。使用超时,您只需将其移至下一个刻度,角度不会抱怨它。
    • 我刚刚发现 setTimeout 使我的 e2e 测试失败! , - “失败:超时等待异步角度任务完成...... - 这可能是因为当前页面不是角度应用程序”,如果我删除超时它会很好。
    • 另外,我刚刚发现 setTimeout 刷新所有应用程序树,效率较低。还有其他方法吗?
    • 组件的父级能否计算出isActive和topVar传给子级?
    猜你喜欢
    • 2017-11-28
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多