在我的服务中,我在 localstorage 中搜索一个变量:
constructor(private storage: Storage) {
this.storage.get('value').then(
(val) => {
this.value = val;
},
() => {
this.value = 'no value';
});
}
问题是我有一个方法:
getVariable(){
return this.value;
}
此方法应返回值。但是值不是一开始就设置的。我该怎么做getVariable等到构造函数中的承诺解析?
您可以使用路由解析程序或依赖 OnInit 接口。如果您绝对需要等待承诺得到解决,请使用解析器。
下面是一个示例:
@Injectable()
export class MyResolver implements Resolve<any> {
constructor(
private storage: MyStorageService,) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
return this.storage.get('value').then(
(val) => {
return val;
},
() => {
return 'no value';
});
}
}
在路由配置中,将路由链接到解析程序,如下所示:
{
path: 'myyPath',
component: MyComponent,
resolve: {
myResolvedValue: MyResolver // myResolvedValue is the key under which you'll be able to retrieved the resolved value. You can put whichever key you want
},
},
最后,将路由数据更改绑定到组件中(请注意,您必须实现 OnInit(:
constructor(private route: ActivatedRoute) {
}
ngOnInit(): void {
this.route.data.subscribe(data => {
this.value= data['myResolvedValue'];
});
}