2017-03-08 86 views
0

我对Angular 2非常新颖。我正在研究angular2 + node js setup。在项目中它是一个简单的认证调用。我想要的是显示一个div块,如果登录api返回一个错误。在HTTP响应中切换元素

这是我所做的。

LoginComponent

private loginResponse: any; 
private submitted: boolean; 
private error: boolean = false; 
private errorMessage: string; 
public loginForm: FormGroup; 

ngOnInit() { 
    // if user is authenticated, redirect him/her to dashboard 
    if (this.auth.isAuthenticated()) { 
     this.router.navigate(['dashboard']) 
    } 
    this.submitted = false; 
} 

// authenticate user 
getLogin() { 
    // return if form is invalid 
    if (!this.loginForm.valid) { 
     return false; 
    } 
    this.submitted = true; 
    var formData = this.loginForm.value; 
    this.auth.login(formData.email, formData.password, this.translate.currentLang) 
     .subscribe(
      (data: Response) => { 
       this.loginResponse = data; 
       if (this.loginResponse.result) { 
        localStorage.setItem('token', this.loginResponse.data); 
        window.location.reload(); 
       } 
       this.submitted = false; 
       this.error = true; 
       this.errorMessage = this.loginResponse.message; 
      }, 
      err => { 
       console.log(err); 
      } 
     ); 
} 

LoginComponent.html

<form [formGroup]="loginForm" id="sign_in" (ngSubmit)="getLogin()" autocomplete="false"> 
      <div *ngIf="error" class="text-danger text-justify msg"> 
       {{ errorMessage }} 
      </div> 

的问题是,当服务器返回结果假的,我的错误属性设置为true,但它并不显示任何效果。

+0

建议添加标签“angular2” – shaochuancs

回答

1

这可能是由于private error: boolean = false;

作为每docs

当一个成员被标记私有,它不能被从 其包含类之外访问

由于模板不存在于组件类中,但在它们之外,这可能是您遇到此问题的原因。

你可以试着改变你的代码是这样的:

private loginResponse: any; 
private submitted: boolean; 
private errorMessage: string; 
public loginForm: FormGroup; 

error: boolean; 

ngOnInit() { 
    // if user is authenticated, redirect him/her to dashboard 
    if (this.auth.isAuthenticated()) { 
     this.router.navigate(['dashboard']) 
    } 
    this.submitted = false; 
} 

// authenticate user 
getLogin() { 
    // return if form is invalid 
    if (!this.loginForm.valid) { 
     return false; 
    } 
    this.submitted = true; 
    var formData = this.loginForm.value; 
    this.auth.login(formData.email, formData.password, this.translate.currentLang) 
     .subscribe(
      (data: Response) => { 
       this.loginResponse = data; 
       if (this.loginResponse.result) { 
        localStorage.setItem('token', this.loginResponse.data); 
        window.location.reload(); 
        this.error = false; 
       } 
       this.submitted = false; 
       this.error = true; 
       this.errorMessage = this.loginResponse.message; 
      }, 
      err => { 
       console.log(err); 
      } 
     ); 
} 

改为error: boolean;并添加this.error = false如果响应是确定的。

+0

不幸的是没有工作..奇怪的行为是,变化不是即时反映。在单击登录按钮错误消息不显示。但是当我在收到回复之前再次点击登录信息显示。它可能是事件相关的? like angular2模板需要知道“error”的值已更改 –

+0

这可能是代码中其他地方的问题,也许您可​​以设置一个[plunkr](https://plnkr.co/)来重现此问题。肯定会帮助调试 – Und3rTow

+1

我发现这个问题。这是因为另一个翻译模块,它具有自定义的“changeDetactionStrategy”,并且没有监听器。我删除它,现在它的工作就像一个魅力..! :)感谢您的建议,了解私人,公共:) –