【发布时间】:2018-10-13 03:15:01
【问题描述】:
我有一条路线需要在加载路线之前从我的 Firebase 数据库中获取一些数据。感觉就像 Route 没有调用 subscribe 所以请求永远不会被触发。我错过了一步吗?
(角度 5)
我的路由器:
{
path: 'class/:idName',
component: ClassComponent,
resolve: {
classData: ClassResolver
}
},
我的解析器:
@Injectable()
export class ClassResolver implements Resolve<any> {
constructor(
private db: AngularFireDatabase
) {}
resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any {
// return 'some data'; //This worked fine
return this.db
.list('/')
.valueChanges() // Returns Observable, I confirmed this.
//.subscribe(); // This returns a Subscriber object if I call it and I never get any data
}
// I tried this and it didnt work either
//const list = this.db
// .list('/')
// .valueChanges();
//console.log('list', list); // Is a Observable
//list.subscribe(data => {
// console.log('data', data); // returned data
// return data;
//});
//return list; // never gets to the component
}
我的组件:
public idName: string;
// Other vars
constructor(
private fb: FormBuilder,
private route: ActivatedRoute,
private db: AngularFireDatabase
) {
// Form stuff
}
ngOnInit() {
// Never makes it here
this.idName = this.route.snapshot.params.idName;
const myclass = this.route.snapshot.data.classData;
console.log('myclass', myclass);
}
我从来没有进入组件。它等待组件加载,但它永远不会加载。如果我添加 subscribe 和 console.out 数据,它会很快返回正确的数据,所以它不是服务。
在我的解析器中调用.subscribe() 后,现在返回一个Subscriber 对象。因为我的返回签名允许any 它返回这个Subscriber,就好像它是数据一样。这现在看起来很明显。
我现在的问题变成了为什么它不能解决我的Observable?
【问题讨论】:
-
是的,你不应该在那里订阅 observable。尝试在此处链接
do方法并将传递给函数的数据记录到控制台,以查看 observable 上发出了什么。
标签: javascript angular firebase observable angular5