0

我在构造函数中有 console.log 和 Resolver 的 ngOnInit() 但没有记录。

解决:{serverResolver:ServerResolverDynamicDataService}},

console.log("ServerResolverDynamicDataService 构造函数");

console.log('ServerResolverDynamicDataService 解析:'

const appRoutes : Routes =[
    {path:"",component:HomeComponent},
    {path:"servers",canActivateChild:[AuthGuardService],component:ServersComponent,
        children:[                
          {path:":id",component:ServerComponent,
           resolve:{serverResolver:ServerResolverDynamicDataService}},
          {path:":id/edit",component:EditServerComponent,canDeactivate:[CanDeativateGuardService]}]},

解析器:

@Injectable()
export class ServerResolverDynamicDataService implements Resolve<ServerModel>{

    constructor(private serversService:ServersService){
        console.log("ServerResolverDynamicDataService constructor");
    }

    resolve(activatedRouteSnapshot: ActivatedRouteSnapshot, routerStateSnapshot: 
        RouterStateSnapshot): ServerModel | Observable<ServerModel> | Promise<ServerModel> {
            console.log('ServerResolverDynamicDataService resolve:'+activatedRouteSnapshot.params['id']);
        return this.serversService.getServer(+activatedRouteSnapshot.params['id']);
    }    
}

更新 1 : app.module.ts 在提供者中有此服务的条目

  providers: [ServersService,AuthGuardService,AuthService,CanDeativateGuardService,ServerResolverDynamicDataService],

每当 URL( http://localhost:4200/servers/1?allowToEdit=0&allowTest=2#loadPage) 被命中时,解析器都没有日志,但代码中有日志,如果我编辑应用程序日志的任何其他部分,应用程序会正确刷新。所以应用程序更改反映了唯一的问题是没有调用解析器。

Update2如果我删除正在工作的父 canActivateChild服务,则不会调用 Angular 2+ 路由解析器。但是我不知道出了什么问题。请帮助我理解。

4

1 回答 1

1

Resolver 是一项服务,OnInit不会在服务中执行。事实上,除此之外OnDestroy,服务中没有其他生命周期钩子。

无论如何,我假设您的解析器是在某处提供的。如果不是,您应该在其装饰器中使用一个参数:@Injectable({providedIn: 'root'})

于 2020-04-19T20:44:18.333 回答