Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 动态修改延迟加载的路由不起作用_Angular_Routes_Lazy Loading - Fatal编程技术网

Angular 动态修改延迟加载的路由不起作用

Angular 动态修改延迟加载的路由不起作用,angular,routes,lazy-loading,Angular,Routes,Lazy Loading,我试图在一个延迟加载的功能模块中修改路由,但没有成功。我尝试了几种方法,包括router.reset(newRoutes),但似乎都不起作用。(九) FeatureModule延迟加载到主应用程序中: loadChildren: () => import('./feature/feature.module').then((m) => m.FeatureModule.forRoot(customRoutes) 所有选项都不起作用。Angular不检测那些动态提供的路由 如果我在导入中

我试图在一个延迟加载的功能模块中修改路由,但没有成功。我尝试了几种方法,包括
router.reset(newRoutes)
,但似乎都不起作用。(九)

FeatureModule
延迟加载到主应用程序中:

loadChildren: () => import('./feature/feature.module').then((m) => m.FeatureModule.forRoot(customRoutes)
所有选项都不起作用。Angular不检测那些动态提供的路由

如果我在
导入中提供静态默认路由
,那么它可以工作,但是我无法修改路由

@NgModule({
  imports: [RouterModule.forChild(defaultRoutes)]
})
export class FeatureModule { }

我想知道这是否与Angular本身有关,或者我做了一些不起作用的错误,因为
导入
提供程序
是两个不同的东西,RouterModule是一个模块,因此它应该放在
导入
部分

在惰性模块中使用动态路由有点棘手,我不知道是否还有其他方法,但您可以尝试以下方法:

FeatureModule
中使用并导出一个变量,并填充延迟加载上的路由

export const FeatureModuleRoutes = [];

@NgModule({
  imports: [RouterModule.forChild(FeatureModuleRoutes)]
})
export class FeatureModule { }
让我们创建一个InjectionToken并将路由存储在其中

//Create the injection token
const ROUTES_STORE = new InjectionToken("Loading lazy routes");

//In your AppModule provide the routes that you need.
   {
      provide: ROUTES_STORE,
      useValue: [{featureRoutes: [{path: "", component: FeatureComponent}]}]
    },
要注入令牌,您需要一个注入器,在延迟加载之前调用它的AppModule,因此您可以提供一个静态注入器,稍后再使用它

export class AppModule {
  static mInjector: Injector;

  //Inject the Injector so we can access it before de Lazy Module
  constructor(injector: Injector) {
    AppModule.mInjector = injector;
  }
}
现在您有了一个喷油器和管路,是时候填充FeatureModuleOutes了。
m
它是一个文件,因此您可以在加载变量之前访问它

    loadChildren: () =>
      import("./feature/feature.module").then(m => {
        const routeStore = AppModule.mInjector.get(ROUTES_STORE);
        routeStore.featureRoutes
          .forEach(route => (m.FeatureModuleRoutes as Array<any>).push(route));
        return m.FeatureModule;
      })
loadChildren:()=>
导入(“./feature/feature.module”)。然后(m=>{
const routeStore=AppModule.minject.get(路由存储);
路线或特征路线
.forEach(route=>(m.FeatureModuleRoutes作为数组).push(route));
返回m.FeatureModule;
})
就是这样,如果有帮助,请告诉我

    loadChildren: () =>
      import("./feature/feature.module").then(m => {
        const routeStore = AppModule.mInjector.get(ROUTES_STORE);
        routeStore.featureRoutes
          .forEach(route => (m.FeatureModuleRoutes as Array<any>).push(route));
        return m.FeatureModule;
      })