Дилемма при создании локальных маршрутов и ресовлер - PullRequest
0 голосов
/ 29 октября 2018

У меня есть маршруты, определенные следующим образом

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class CartRoutingModule implements Resolve<ServiceCart> {
  constructor(private service: CartService) {}

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    const id = route.params['id'] ? route.params['id'] : null;
    if (id) {
      return this.service.find(id).pipe(map((Cart: HttpResponse<ServiceCart>) => Cart.body));
    }

    return of(new ServiceCart());
  }
}

const routes: Routes = [
  {
    path: '', component: CartComponent,
    children: [
      {path: '', redirectTo: 'list', pathMatch: 'full'},
      {path: 'list', component: ListComponent},
      {path: 'new', component: CartEditComponent, resolve: {Cart: CartRoutingModule}}
    ]
  }];

Проблема здесь в том, что я никогда не смогу получить этот проход компилятором, так как routes должен быть определен до CartRoutingModule для использования в @NgModule, а CartRoutingModule должен быть определен до routes, поскольку это resolve на одном из маршрутов

Итак, компилятор выдает либо

TS2448: Block-scoped variable 'routes' used before its declaration.

или

TS2449: Class 'CartRoutingModule' used before its declaration.

тогда это как тупик

на данный момент, как использовать другую аннотацию или другой способ ввода маршрута в контексте, чтобы сделать компилятор счастливым?

1 Ответ

0 голосов
/ 29 октября 2018

Есть ли какая-либо конкретная причина, по которой вы используете NgModule в качестве решателя? Звучит неправильно, поскольку целью NgModels является конфигурирование, а Resolver предоставляет данные. Возможно, вы захотите заменить @NgModel декоратор на @Injectable и переименовать его так, чтобы это имело смысл:

@Injectable({provideIn: 'root'}) // or wherever needed
export class CartResolve
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...