首先,我想指出的是,我已尝试解决NGRX的问题,但我知道这是错误的解决方案,并且在使用Angular时还产生了其他一些问题。
我有一个用Angular构建的页面Web应用程序,该应用程序按部分数量而不是单独的页面分开。 该应用程序还具有一个导航栏,其中包含用于导航到同一页面中的选定部分的按钮(而不是“路由”至其他页面)。
重点是每个部分没有固定的高度,因为它取决于内部内容=> 高度=动态数字。
为了提供 scrollTo 函数需要接收的偏移量,我需要在 navbar.component.ts 与无限数量的组件之间进行跨组件通信(可以编辑的部分数)。
如果我要使用服务,则意味着我需要检查哪个组件(带有内部部分)需要检查(高度)-我也不知道该怎么做。
对此表示感谢。
谢谢!
____________________________________________________________________
我的NGRX解决方案:(您可以跳过本段,因为它仅描述了我尝试过的解决方案)
如上所述,我试图通过将每个部分的高度存储在我的NGRX存储中并在使用导航按钮时对其进行检索来尝试使用NGRX。
之所以这样做,是因为我已经将菜单项数据(URL#片段名称,显示名称等)存储在我的NGRX存储中,所以我只添加了偏移量。
>我使用 .dispatch 来存储两种情况下的偏移量:
调整页面大小时(因为可以更改DOM的高度) @HostListener(“ window:resize”,[])
初始化视图时 ngAfterViewInit()
这出现了以下错误: ExpressionChangedAfterItHasBeenCheckedError
我已经阅读了一点,并了解可以通过将更改(调度)包装在商店中的“ setTimeout”方法中来解决,但是它会带来性能问题(重新渲染整个应用程序-我不想这样做)。
如果我仅更改数据而不更改某些DOM,为什么会发生此错误?
问题是-我正在更改DOM!那是因为我正在更改商店中的某些数据,并且“刷新”了我的所有商店数据,其中部分数据用于呈现DOM(例如,我之前提到的 navbar按钮显示名称- )。 ____________________________________________________________________
更新:
我已经尝试将每个whitin区域都包裹起来。runOutsideAngular(()=> {})(下面的精彩视频:https://www.youtube.com/watch?v=DsBy9O0c6eo) 在ngAfterViewInit()中,但仍然显示相同的错误。