使用Angular Matcher进行路由抛出“请考虑将函数表达式更改为导出函数”

时间:2019-11-19 17:24:38

标签: angular routing matcher

我想知道你们是否可以帮助编写此代码!因为我想我会不省人事

这是\helpers\matcher.ts(4,12)

import { UrlMatcher , UrlSegment } from "@angular/router";

export function match(path: string): UrlMatcher {
    return function matcher(url: UrlSegment[], group) {
        console.log(path, url, group);
        if (url.length > 0 && url[0].path === path) {
            return { consumed: [url[0]] };
        }
        return null;
    };
}

这是我在构建--prod时遇到的错误

  

src \ app \ app.module.ts(124,30)中的错误:模板编译“ AppModule”时发生错误

     

'rootRouterConfig'中的装饰器不支持函数表达式
  “ rootRouterConfig”引用“匹配”
  'match'包含src \ app \ shared \ helpers \ matcher.ts(4,12)中的错误
  考虑将函数表达式更改为导出的函数

但是它可以编译并与ng build和ng serve完美配合。

这是app.routes路径

export const rootRouterConfig: Routes = [

    { path: ':param', component: HomeComponent,
        children: [
            { matcher: match('job-spec/:id'), component: JobSpecDetailsComponent },
            { path: '**',  redirectTo: '404' },
        ]
    },
];

这是app.module

@NgModule({
    imports: [
        ....
        RouterModule.forRoot(rootRouterConfig, {
            useHash: false,
            scrollPositionRestoration: 'enabled',
            anchorScrolling: 'enabled',
        }),
        ....

1 个答案:

答案 0 :(得分:1)

我无法测试,但请尝试以下操作:

export function match(url: UrlSegment[]): UrlMatcher {
    if (url.length > 0 && url[0].path === path) {
       return { consumed: [url[0]] };
    }
    return null;
}

并将其用作:

{ matcher: match, component: JobSpecDetailsComponent },

URL有路径,但是不确定您为什么要再次传递路径。静态使用路径,查看其是否可以编译,然后找出路径。