【发布时间】:2019-09-20 17:11:28
【问题描述】:
我正在尝试在 Nativescript 中为名为“rewards”的路由实现解析保护,但无法使其正常工作。
问题 - 如果我在路由配置中使用解析防护,则 RewardListComponent 永远不会被激活 - 它卡在“ResolveStart”(请参见下面的屏幕截图),但一旦我移除解析防护,组件就会被激活。
请指导我在哪里出错。
路由器跟踪日志
rewards-routing.module.ts
import { NgModule } from "@angular/core";
import { Routes } from "@angular/router";
import { NativeScriptRouterModule } from "nativescript-angular/router";
import { RewardsListResolverService } from "./services/rewards-list-resolver.service";
import { RewardsListComponent } from "./components/rewards-list/rewards-list.component";
const routes: Routes = [
{
path: "rewards",
component: RewardsListComponent,
resolve: {
rewards: RewardsListResolverService
}
}
];
@NgModule({
imports: [NativeScriptRouterModule.forChild(routes)],
exports: [NativeScriptRouterModule]
})
export class RewardsRoutingModule {}
rewards.module.ts
import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { RewardsRoutingModule } from './rewards-routing.module';
import { NativeScriptCommonModule } from 'nativescript-angular/common';
import { NativeScriptFormsModule } from 'nativescript-angular/forms';
import { RewardsService } from './services/rewards.service';
import { RewardsListResolverService } from './services/rewards-list-resolver.service';
import { RewardsListComponent } from './components/rewards-list/rewards-list.component';
@NgModule({
declarations: [RewardsListComponent],
imports: [
RewardsRoutingModule,
NativeScriptCommonModule,
NativeScriptFormsModule
],
schemas: [NO_ERRORS_SCHEMA],
providers: [
RewardsService,
RewardsListResolverService
]
})
export class RewardsModule { }
rewards-list-resolver.service
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { SimpleReward } from '../models/simple-reward';
import { Observable } from 'rxjs';
import { RewardsService } from './rewards.service';
@Injectable()
export class RewardsListResolverService implements Resolve<SimpleReward[]> {
constructor(private rewardsService: RewardsService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<SimpleReward[]> {
return this.rewardsService.getAllRewards();
}
}
rewards-list.component.ts
import { Component, OnInit, OnDestroy } from "@angular/core";
import { Subscription } from "rxjs";
import { SimpleReward } from '../../models/simple-reward';
@Component({
templateUrl: "./rewards-list.component.html",
moduleId: module.id
})
export class RewardsListComponent implements OnInit, OnDestroy {
rewards: SimpleReward[];
private subscriptions: Subscription[] = [];
constructor() {}
ngOnInit() {
console.log('Activated');
// this.subscribeToResolvedData();
}
ngOnDestroy(): void {
this.subscriptions.forEach(x => x.unsubscribe());
}
}
rewards.service.ts
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from 'rxjs';
import { SimpleReward } from "../models/simple-reward";
@Injectable()
export class RewardsService {
private baseUrl = "http://10.0.2.2:52553/api/rewards";
constructor(private http: HttpClient) {}
getAllRewards(): Observable<SimpleReward[]> {
const url = `${this.baseUrl}/all`;
return this.http.get<SimpleReward[]>(url);
}
}
【问题讨论】:
-
你能展示一下
this.rewardsService.getAllRewards()的实现吗?附带说明,如果你想在你的应用程序中有奇怪的错误,请使用NO_ERRORS_SCHEMA:) -
感谢您的回复!我已经添加了奖励服务的实现
标签: angular nativescript