使用服务在Angular2和TypeScript中定义路由

时间:2016-06-03 11:09:14

标签: typescript angular

Angular2路由器没有输出所有路由的方法,所以我所做的是定义了一个服务来输出这样的路由......

export class Route {
        constructor(
            public path: string,
            public component: any
        ) {}
    }

    @Injectable()
    export class RouteService {

        public static getRoots(): Route[] {
            return [
                 { path: '/', component: HomeComponent },
                { path: '/about-me', component: AboutMeComponent },
                { path: '/food', component: FoodComponent },
                { path: '/photos', component: PhotosComponent },
                { path: '/technology', component: TechnologyComponent },
                { path: '/blog', component:BlogComponent }
            ];
        }
    }

现在我在我的main.ts中使用它,如此@Routes(RouteService.getRoots()),一切似乎都有效,但是我想使用相同的服务来定义一个变量,这样我就可以循环遍历路由数组。 ..喜欢这样

export class NavigationComponent {

    public routes: Route[];

    constructor(private router:Router, private routeService: RouteService) {

       // just write this to the console for now
       console.log(routeService.getRoots());
    }

    // more code here, etc....

然而,这会在控制台routeService.getRoots is not a function中产生错误,我的应用程序崩溃了!我必须做什么,所以我可以在我的main.ts的@Routes()部分使用该服务,同时在其他组件中使用该服务。我真的不知道我哪里出错了,因为Angular2现在正在弯曲我的想法!

1 个答案:

答案 0 :(得分:2)

因为方法getRoots()被标记为静态。如果你需要它是静态的,你必须这样称呼它:RouteService.getRoots()。否则,只需删除static关键字。

修改 您在@Routes()部分没有服务实例,因此您需要一个静态方法。由于您所做的只是调用静态方法,因此您也不需要在构造函数中将其注入。