首页 > 解决方案 > angular - 订阅使用 http 的服务

问题描述

这是我第一次使用角度和打字稿。

我的服务中有这个功能:

login(email: String, password: String) {
  let formData = {
    usuario    : email,
    senha      : password,
    retsession : true
  }

  console.log('go');
  return from(this.nativeHttp.post<any>(this.env.API_URL+'/login', formData, {'Content-Type': 'application/json'})).pipe(
    finalize(() => console.log('ok'))
  ).subscribe(data => {
    console.log('back');
    console.log(data);
    this.token = "123";
  }, err => {
    console.log('Native Call error: ', err);
  });
}

然后我试图以auth-login.page.ts这种方式调用它:

onSubmit(f: NgForm) {
  this.authService.login(f.value.usuario, f.value.senha).subscribe(
    data => {
      console.log('login ok');
    },
    error => {
      console.log('eeeerrroowwww');
      console.log(error);
    },
    () => {
      this.router.navigateByUrl('/tabs');
    }
  );
}

所以我收到了这个错误:

auth-login.page.ts(24,60): error TS2551: Property 'subscribe' does not exist on type 'Subscription'.

怎么了?

标签: javascriptangulartypescriptrxjssingle-page-application

解决方案


我认为您应该将代码更改为此

return this.nativeHttp.post<any>(this.env.API_URL+'/login', formData, {'Content-Type': 'application/json'})

然后在您的组件中,只需使用您现在拥有的相同代码,那么您应该会很好

onSubmit(f: NgForm) {
  this.authService.login(f.value.usuario, f.value.senha).subscribe(
    data => {
      console.log('login ok');
    },
    error => {
      console.log('eeeerrroowwww');
      console.log(error);
    },
    () => {
      this.router.navigateByUrl('/tabs');
    }
  );
}

推荐阅读