【发布时间】:2018-04-22 23:34:55
【问题描述】:
我在 Angular 应用程序上使用 Guard 来解析初始关键数据。在 Angular 的第 4 版上,我是这样处理的:
// app.routing.ts
routing = [{
path: '', component: AppComponent, canActivate: [ResolveGuard],
}];
// resolve.guard.ts
@Injectable()
export class ResolveGuard implements CanActivate {
constructor(
private _api: ApiService,
) { }
canActivate(): any {
return this._api.apiGet('my/url').map(response) => {
if ( response.status === 'success') {
// Consume data here
return true;
}
return false;
}).first();
}
}
由于Http on Angular 5 的新版本不再使用.map() 属性,所以这不起作用。
如果我将.map() 更改为.subscribe(),它不会引发任何错误,但应用程序永远不会正确解析。另一方面,使用.first() 和/或.map() 会引发一些错误,正如在此版本中所预期的那样。
在这种情况下我该怎么办?
只有在加载初始数据时才需要激活该路由。
编辑以添加有关apiGet 函数的信息:
constructor(private _http: HttpClient) {}
public apiGet(url: string): any {
return this._http
.get(this.apiUrl + url)
.catch(this.handleError.bind(this));
}
【问题讨论】:
-
不再使用 map() 方法是什么意思? o.O
-
请添加你的apiGet方法的定义,否则很难说你能做什么
-
@Jota.Toledo 我的意思是说新的 Http 客户端模块不再需要它(如果我理解正确的话)。另外,我用 apiGet 函数更新了问题,但它是调用 http 函数的服务。
-
你检查过答案了吗?
标签: angular rxjs angular-router angular-httpclient angular-router-guards