0

我想在实例化路由/组件之前获取数据。因此,我想使用 Angular2-Routing-Module 中的“解析器”接口。

看看我的代码。它使用字符串作为提供程序名称,但如果我为提供程序使用 OpaqueToken 则会引发错误。

注意“不工作”的评论。

1 我的(儿童)路线(摘录)。

export const routes: Routes = [{
path: 'myPath',
component: MyComponent,
children: [
    {
        path: ':id',
        component: MyComponent,
        resolve: {
            itemData: 'MyResolver' // WORKING --- wanted to replace with itemData: MyToken
        }
    }
]
}];

2 我的模块代码(摘录):

export let MyToken: OpaqueToken = new OpaqueToken('my.resolver');    

@NgModule({
        imports: [
            CommonModule,
            ...
        ],
        declarations: [
            MyComponent,
        ],
        providers: [
            {
                provide: 'MyResolver', // WORKING -- wanted to replace with provide: MyToken
                useFactory: (DataService: any) => {
                    return new MyResolverService(DataService);
                },
                deps: [MyInstanceOfDataService]
            }
        ]
    })
    export class MyModule {
    }

3 我的自定义解析器类(摘录):

@Injectable()
export class MyResolverService implements Resolve<any> {

    constructor(protected DataService: any) {
    }

    resolve(ActivatedRoute: ActivatedRouteSnapshot): Promise<any> {
        return this.DataService.getItem(id).toPromise()
                .then((response: any}) => {
                    return response;
                });
    }
}

不可能用创建的 OpaqueToken(“MyToken” - 当然不带引号)替换字符串(“myResolver”)。不知道为什么。我为多个提供者使用了多个 OpaqueToken,但解析器无法使用它。

控制台中的错误消息如下所示,没有更多信息。

错误:必须定义令牌!

有人知道吗?

4

1 回答 1

0
// import MyResolver and MyToken here

export const routes: Routes = [{
path: 'myPath',
component: MyComponent,
children: [
    {
        path: ':id',
        component: MyComponent,
        resolve: {
            itemData: MyResolver
            itemData: MyToken
        }
    }
]
}];
于 2017-02-25T14:10:14.767 回答