属性值在angular4的subscribe块中未更改

时间:2018-08-15 11:44:11

标签: angular asp.net-core

我正在asp.net核心角度应用程序中实现身份验证。在我的登录组件中,我正在auth服务中发送凭据,该凭据返回true或false。当返回true时,它工作正常。但是,当它返回false时,不会将'invalidLogin'属性的值更改为true。我已经尝试过将其放置在订阅块之外,然后才起作用。我不知道为什么它在订阅块内没有改变。 `

export class LoginComponent implements OnInit {

  invalidLogin:boolean | undefined;
  loginCredentials:loginModel={
    email:"",
    password:""
  };

  constructor(private router:Router, private authService:AuthService) { }

  ngOnInit() {
    this.invalidLogin=false;
  }

  signIn() {
    this.authService.login(this.loginCredentials).subscribe(result=>{
      if(result) this.router.navigate(['/']);
      this.invalidLogin=true;
    });
  }

}

`

2 个答案:

答案 0 :(得分:2)

subscribe的第一个参数称为 next 回调,仅在HTTP请求成功时才调用。由于服务器返回的是400(错误请求),因此将其视为错误,因此不会调用您的代码。

subscribe second 参数称为 error 回调:如果有错误,则调用此方法。这意味着您可以提供第二个参数,以便在出现错误时得到通知,例如:

this.authService.login(this.loginCredentials).subscribe(
    result => {
        if (result) this.router.navigate(['/']);
        this.invalidLogin = true; // Might not be necessary anymore.
    },
    err => {
        this.invalidLogin = true;
    }
});

Observables的角度guide解释得比我更好:

  

相反,您可以通过在观察者上指定错误回调来处理错误。产生错误还会导致可观察对象清除订阅并停止产生值。可观察对象可以产生值(调用下一个回调),也可以完成,调用完成或错误回调。

答案 1 :(得分:1)

检查响应中的状态码,如果它不是200(成功的状态码范围),则将通过如下所示的错误回调进行处理:

.subscribe((data) => {
  // Success case
  console.log(data);
},
(e) => {
  // Error case
  console.log(e);
});