将数据传递到延迟加载的模块,并且无需通过组件即可用于服务

时间:2018-08-24 00:16:55

标签: angular

我有一个延迟加载的模块,需要将一些配置数据传递到其中。

我知道您不能将forRoot用于延迟加载的模块。

我尝试过在路由中传递数据,这种方法行得通,但是据我所知,在延迟加载的模块中获取数据的唯一方法是从根组件的ngOnInit方法获取。问题是我需要在初始化延迟加载的模块的根组件之前实例化和使用的API服务中使用此数据,因此在调用ngOnInit时为时已晚。例如,从解析器调用API服务,该解析器在初始化组件之前执行。

是否有一种方法可以从延迟加载的模块中的服务从路由获取数据或以其他方式传递数据?我希望该模块是独立的,因此无法将应用程序级服务注入其中。数据需要动态传递。

我尝试过的事情:

将数据从根路由模块传递到延迟加载的模块中

// app / app-routing.module.ts

const appRoutes: Routes = [
   {
        path: 'feature',
        loadChildren: 'feature#featureModule',
        data: {
            test: 'someData'
        }
    },
]

在延迟加载的模块中,我可以从根组件中获取数据

// feature / root.component.ts

export class FeatureRootComponent {

    constructor(private activatedRoute: ActivatedRoute,
              ) {

        this.activatedRoute.data.pipe(
            take(1)
        ).subscribe(data => {
           console.log(data.test); // works fine
        });

}

1 个答案:

答案 0 :(得分:0)

我相信Suresh所说的是您可以在路由模块中传递一个对象。 例如:

{
    path: 'user',
    loadChildren: 'src/to/lazy-loaded-module/user.module#UserModule',
    data: {
        breadcrumbLabel: 'User Data',
        someOtherData: true,
        extraInfo: 'xyz'
    },
    resolve: {
        resolveService: ExamplaryResolver
    }

}

,并通过使用ActivatedRoute及其数据属性在子组件中进行引用,或者通过使用ActivatedRouteSnapshot在ExamplaryResolver中进行引用

resolve(route: ActivatedRouteSnapshot) {

    do some stuff here with route.data
    and return

}