我搜索了有关该论点的更多结果,但没有答案对我有帮助。我试图使用firebase中的网址来做成角度的http.get():https ://firestore.googleapis.com/v1/projects/angularfirebasegb/databases/(default)/documents/cart?key=AIzaSyDNW48hAmvH8eAZpbeflRKb0khY5Blzsqg
您可以尝试,它可以返回json。我尝试了不同的方法,但是结果还是“未定义”。现在,我正在尝试这种模式:
import { Injectable } from '@angular/core';
// install rxjs first: npm install rxjs-compat --save
import { Observable } from 'rxjs/Observable';
import { BookModel } from '../../models/book/book.model';
import { Subject } from 'rxjs/Subject';
import { AngularFirestore } from '@angular/fire/firestore';
//import { AngularFirestore } from 'angularfire2/firestore';
// se non presente: npm install @angular/http@latest
import { Http } from '@angular/http';
//import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class CartService {
private emitAddToCart = new Subject<any>();
addEmitted$ = this.emitAddToCart.asObservable();
// http requests (https://firebase.google.com/docs/firestore/use-rest-api) example of httprequest
hardCodeUrl = 'https://firestore.googleapis.com/v1/projects/angularfirebasegb/databases/(default)/documents/cart?key=AIzaSyDNW48hAmvH8eAZpbeflRKb0khY5Blzsqg';
constructor(private db: AngularFirestore, private http: Http) { }
query() {
// promise
// take values stored in cart in Firebase
return this.db.collection('/cart').valueChanges();
}
add(data){
// this is going to put some items into an item collection, storing data in firebase
let item = this.db.collection<BookModel>('/cart').add(data.getData());
// next is going to do all the save for us (but the name is a quite strange)
this.emitAddToCart.next(item);
return item;
}
emitChange(book: BookModel) {
this.emitAddToCart.next(book);
}
httpCall() {
debugger;
// return this.http.get(this.hardCodeUrl);
return this.http.get(this.hardCodeUrl).pipe(map(data => {})).subscribe(result => {
console.log("RISULTATO " +result);
});
}
}
并从另一个类调用service.httpCall(),它显示“ RISULTATO undefined”。在此之前,我尝试过以return this.http.get(this.hardCodeUrl);
这种方式调用它:
service.httpCall().subscribe(data => {
responseFromBackEnd = data;
});
但实际上仍未定义,执行以下操作:
let jsonFromBackend = JSON.parse(responseFromBackEnd.text());
它给我错误原因未定义。我不知道为什么
更新:使用
return this.http.get(this.hardCodeUrl).subscribe(result => {
console.log("RISULTATO", result);
});
它返回这样的对象:
和.text()返回空
您的地图管道.pipe(map(data => {}))
使其返回未定义状态:
return this.http.get(this.hardCodeUrl).subscribe(result => {
console.log("RISULTATO", result);
});
这将返回每个对象。
映射运算符将给定的项目函数应用于由源Observable发出的每个值,并将结果值作为Observable发出。您将获取每个值并返回一个空对象作为结果。
我更喜欢从服务返回Observable:
httpCall() {
return this.http.get(this.hardCodeUrl);
}
并从需要此值的组件中订阅它:
this.service.httpCall().subscribe((res) => {
console.log("res", res);
});
而且,如果您需要进行一些转换,您仍然可以在服务器中进行转换并返回可观察到的:
httpCall() {
return this.http.get(this.hardCodeUrl).pipe(
map((res: { documents: any }) => {
return res.documents;
})
);
}
这将返回带有原始响应的documents属性值的observable。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句