【发布时间】:2018-02-21 07:43:04
【问题描述】:
我正在尝试使用键从 firebase 检索单个对象。我不想为 .subscribe() 方法实现 OnDestroy,而是想使用 take() 属性来获取单个对象并完成它。
问题是我收到“类型 void 上不存在属性获取”的错误 控制台中的错误是“未定义不是对象”。我已经搜索过,似乎无法找到解决方案。
constructor(
private router: Router,
private route: ActivatedRoute,
private categoryService: CategoryService,
private productService: ProductService) {
this.categories$ = categoryService.getCategories();
const id = this.route.snapshot.paramMap.get('id');
if (id) {
this.productService.get(id).take(1).subscribe(p => this.product = p);
}
}
我已经导入了 rxjs/add/operator/take。
编辑: 下面是我的 ProductService 类
export class ProductService {
constructor(private db: AngularFireDatabase) { }
create(product) {
return this.db.list('/products').push(product);
}
getAll() {
return this.db.list('/products').snapshotChanges();
}
get(productId) {
return this.db.object('/products/' + productId);
}
}
这是我在控制台中遇到的错误:
错误:未捕获(承诺):TypeError: this.productService.get(id).take 不是函数。 (在 'this.productService.get(id).take(1)', 'this.productService.get(id).take' 未定义)
【问题讨论】:
-
您的
productService代码在哪里?问题是productService.get()返回未定义。 -
嗨@mdewitt,我用 productservice.get() 方法添加了我的 productservice 类。如果有帮助,这就是我在控制台中遇到的错误:错误:未捕获(承诺):TypeError:this.productService.get(id).take is not a function。 (在'this.productService.get(id).take(1)'中,'this.productService.get(id).take'未定义)
-
我不确定,但这个问题似乎与angularjs 无关。它可能是angular,也似乎是typescript而不是javascript;您可能想再次检查您的标签并找出哪些标签实际上适用。
-
看来问题可能是您的
get没有返回您需要的list一个take,它已经返回了一个object。 -
this 有帮助吗?
import {Observable} from 'rxjs/Rx';
标签: angular typescript firebase-realtime-database rxjs angular-promise