【发布时间】:2018-03-03 02:30:36
【问题描述】:
在我的 Angular 应用程序中,我有两个服务,一个处理 http 层,另一个只是一个路由守卫,用于实现与第一个服务的状态相关的 canActivate 方法。例如:
后端服务:
@Injectable()
export class BackendService {
private data: any;
constructor(private http: Http) {
console.log('backend service constructor hit');
this.data = 'initial';
}
getData() {
console.log(this.data);
return this.data;
}
setData(data) {
// http stuff
this.data = data;
}
}
routeguard.service:
@Injectable()
export class RouteguardService implements CanActivate {
constructor(private backendService: BackendService) { }
canActivate() {
return this.backendService.getData() !== 'initial';
}
}
我认为我在错误的位置提供了其中一项服务?目前,我的app.module 的providers 数组中有这两项服务。但是我可以通过 console.log 语句判断 backend.service 在作为路由的一部分被调用时与组件使用它时是分开的,所以数据是不同的,并且数据总是返回为尽管已将其设置为来自组件的其他内容,但在 canActivate 方法中检查时为“初始”。希望我解释清楚了,我还是 Angular 的新手。
我是否需要在不同的位置提供其中一项服务,还是我完全做错了什么?感谢您的任何指点。
【问题讨论】:
-
该问题不包含所有相关代码。请提供stackoverflow.com/help/mcve。使用您所指的组件和模块。
-
您的应用程序中是否有多个模块?
标签: angular dependency-injection angular-routing angular-services angular-router-guards