为啥 Angular 6 不发送 HTTP Get/Post 请求?

Posted

技术标签:

【中文标题】为啥 Angular 6 不发送 HTTP Get/Post 请求?【英文标题】:Why Angular 6 doesn't send HTTP Get/Post requests?为什么 Angular 6 不发送 HTTP Get/Post 请求? 【发布时间】:2018-08-05 07:45:07 【问题描述】:

我在 Angular 6 中有以下服务:

@Injectable()
export class LoginService 
    constructor(private http: HttpClient)  

    login(): Observable<boolean> 
        var url = `$environment.baseAPIUrl$environment.loginUrl`;

        return this.http.get<boolean>(url);
    

我从我的组件中调用它:

@Component(
    selector: 'bpms-login',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.scss']
)
export class LoginComponent implements OnInit 

    constructor(private loginService: LoginService)  

    ngOnInit() 
    

    login() 
        var self = this;
        self.loginService.login();
    

为什么它不发送我的请求?

【问题讨论】:

你必须订阅Observable .. 它应该是self.loginService.login().subscribe() 【参考方案1】:

Observable 在您订阅之前不会被调用。 Http API 方法返回 Observable,仅仅通过调用 observable 不会进行 API 调用。

self.loginService.login().subscribe(
  (data) => console.log('Logged in successfully')
);

【讨论】:

【参考方案2】:

订阅返回的 observable 之前不会进行 Http 调用。

@Component(
selector: 'bpms-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss']
)
export class LoginComponent implements OnInit 

constructor(private loginService: LoginService)  

ngOnInit() 


login() 
    var self = this;
    self.loginService.login().subscribe();
 

【讨论】:

【参考方案3】:

您应该调用您的login() 函数,例如在ngOnInit() 或表单提交事件中,请务必调用它。

并更新您的 login() 函数,如下所示:

login() 
    this.loginService.login()
        .subscribe((res) => console.log('login() response!'));
 

【讨论】:

【参考方案4】:

如果你的返回类型是 Observable 你需要订阅它,以便在它准备好后得到响应。所以你的代码会是这样的

@Component(
selector: 'bpms-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss']
)
export class LoginComponent implements OnInit 

constructor(private loginService: LoginService)  

ngOnInit() 


login() 
    var self = this;
    self.loginService.login().subscribe();
 

【讨论】:

以上是关于为啥 Angular 6 不发送 HTTP Get/Post 请求?的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 中执行 Http get 方法而不重试并等到服务器发送响应?

为啥请求中没有发送来自 $http GET 的数据? [复制]

带有 HTTP 基本身份验证的 Angular 6 HTTP Get 请求

为啥即使我已将 withCredentials 设置为 true,Angular 也不通过 POST 请求发送 cookie?

使用 OPTIONS 方法未使用 http 请求 Angular 6 发送授权标头

如果请求和响应的 uri 相同,为啥 Microsoft Edge 在调用 POST/REDIRECT/GET 方法时发送空的 http-referer?