首页 > 解决方案 > ngrx 路由器无法读取未定义的属性“firstChild”

问题描述

我正在尝试使用ngrx的路由器商店

/模块

@NgModule({
    imports: [
        ....
        StoreModule.forRoot(reducers)
        StoreRouterConnectingModule.forRoot(),
        ...
    ],
    ....
})

/店铺

import { getSelectors, RouterReducerState } from '@ngrx/router-store'

const selectRouter = createFeatureSelector<RouterReducerState>('router');
const { selectQueryParam } = getSelectors(selectRouter);

export const selectedId = selectQueryParam('id'); //error after subscribing

但是当我订阅任何selectRouter选择器时,例如selectQueryParam,我得到错误

Cannot read property 'firstChild' of undefined

因为我的routerState对象没有root属性...

没有根属性的 routerState 对象的屏幕截图

我在谷歌上能找到的最接近的是https://github.com/ngrx/platform/issues/2153

知道如何解决这个问题并使用我的路线选择器吗?

标签: angularngrxngrx-router-store

解决方案


TypeError: Cannot read property ‘firstChild’ of undefined

发生这种情况是因为,将一个空的输入对象传递给 serialize(),但它需要一个 RouterStateSnapshot 的实例。

什么是 RouterStateSnapshot?

这是一个相对复杂的类,在我们模拟输入之前需要一些了解。这实际上是测试序列化程序中最复杂的部分。

如何测试 NgRx 路由器状态序列化器


推荐阅读