Angular http.get()不返回可观察的

Angular http.get()不返回可观察的,angular,typescript,rxjs,ionic4,angular-httpclient,Angular,Typescript,Rxjs,Ionic4,Angular Httpclient,注意:问题显然是ionViewDidLoad()没有被执行,因为http.get确实获得了一个可观察的对象。 我试图在执行请求时获取可观察值,以便稍后获得其json响应,但没有收到错误,浏览器控制台中也没有显示任何内容。我不知道为什么它没有返回任何东西 我尝试了许多URL,并多次检查导入。 home.page.ts import { ServicioService } from '../servicio.service'; import { Observable } from

注意:问题显然是ionViewDidLoad()没有被执行,因为http.get确实获得了一个可观察的对象。 我试图在执行请求时获取可观察值,以便稍后获得其json响应,但没有收到错误,浏览器控制台中也没有显示任何内容。我不知道为什么它没有返回任何东西

我尝试了许多URL,并多次检查导入。 home.page.ts


    import { ServicioService } from '../servicio.service';
    import { Observable } from 'rxjs';
    import { HttpClient } from '@angular/common/http';
    ...
    ionViewDidLoad(){
          const hola = this.servicio.goWiki(this.userInput).
          subscribe((response) => {
            console.log(response);
           });
        }

servicio.service.ts


    import { Injectable } from '@angular/core';
    import { map } from 'rxjs/operators';
    import { HttpClient } from '@angular/common/http';
    import { Observable } from 'rxjs';

    @Injectable()
    export class ServicioService {

        constructor(public http: HttpClient) {
            console.log('goin!');
        }

        goWiki(userInput): Observable<any>{
            return this.http.get('https://www.reddit.com/r/gifs/top/.json?limit=105sort=hot');
        }


我只是希望获得一个可观察的对象,以便能够读取它并从中提取特定数据。

您正在对该URL进行获取:“”

这里可能会有很多事情出错。其中一个可能是CORS

如果您的web应用不允许CORS(跨来源请求共享),则您将无法从呼叫中获得响应。该呼叫基本上被浏览器阻止(请检查您的浏览器)。如果查看网络日志,第一个调用将是OPTIONS,而不是get。本质上,网站应该返回允许调用的Http操作谓词


尝试在您的计算机上或与web应用位于同一域的任何计算机上调用本地iis服务器应用程序,http.get将起作用。

您的组件似乎缺少构造函数中的http,并且您尝试以错误的方式调用服务


你不需要把它放在一个真正的方法中。

使用Ionic 4,在Angular中,你不再有
Ionic ViewDidLoad
生命周期挂钩。改用标准的角度钩

离子4的生命周期

[……]

除了
ionViewDidLoad
(因为它与
ngOnInit
相同)和两个导航防护之外,所有来自IONAL 3的生命周期挂钩仍然可用

**service.ts**
从“@angular/core”导入{Injectable};
从'@angular/common/http'导入{HttpClient,HttpHeaders};
从“rxjs”导入{Observable};
从“rxjs/operators”导入{map};
构造函数(公共http:HttpClient){}
getFirst():可观察{
返回此.http.get('https://www.reddit.com/r/gifs/top/.json?limit=105sort=hot)。管道(映射(res=>{
返回res;
}));

}

请提供您的问题的最小复制,最好是在StackBlitz中。您确定调用了
ionViewDidLoad()
?请检查此帖子:[未被调用)也许您可以使用console.log在“ionViewDidLoad()”中添加打印消息以检查此方法是否已执行http.get返回可观察的:可观察的,不可观察的,检查此页面:@NicuVlad I put a console.log()但是没有返回任何内容,因此它没有被执行链接是错误的,我更改了它。我想这不是.get,因为如果我将ionViewDidLoad放入构造函数:
构造函数(navcntrlr:NavController,private alertcontroller:alertcontroller,public servicio:ServicioService){this.ionViewDidLoad();}
我得到的数据:{kind:“Listing”,数据:{…}我想这就是我需要的。但是,ionViewDidLoad()不应该在那里执行,这就是nosense,对吧?谢谢,就是这样!我甚至都没想过。

    import { ServicioService } from './servicio.service';
    import { HttpClientModule } from '@angular/common/http';

    imports: [HttpClientModule, BrowserModule, IonicModule.forRoot(), AppRoutingModule, ComponentesModule],
      providers: [
        ServicioService,...

**service.ts**
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

 constructor(public http: HttpClient) { }

getFirst(): Observable<any> {

return this.http.get('https://www.reddit.com/r/gifs/top/.json?limit=105sort=hot').pipe(map(res => {
  return res;
}));