0

Here is my HTML code:

<form>
    <input id = "username" type="text" name="username" ngModel placeholder="username">
    <input id = "password" type="password" name="password" ngModel placeholder="password">
</form>
<button name="buttonLogin" type="button" (click)="login()" style="height:30px; width:100px;">Login</button>

Here is my component.ts file code:

export class AuthComponent implements OnInit {
  username: any;
  password: any;

  login(){
    this.authService.login(this.username,this.password).subscribe(data=>console.log('login 
    successful'));//email pass will be fetched from text boxes
  }
}

I have tried many ways to get input from the text field into the component.ts file variables. but no method works. I am working on frontend as well as backend. This is the authorization part. If i pass username and password values directly in the component.ts file then the login is successful all the way to the backend and the database. But when I try to get variables of the input text fields in the html file then it doesn't work. Please have a look, thanks.

2 Answers 2

4

Hey there are two ways to make forms in angular :

  1. Reactive forms

With this method, you have to define your properties like this :

export class AuthComponent implements OnInit {
  myForm: FormGroup;

  constructor(private formBuilder: FormBuilder) { }
  ngOnInit() {
    this.myForm = this.formBuilder.group({
      username: ['default value', [/*Validators*/]]
      password: ['default value', [/*Validators*/]]
    })

  }

  login(){
    this.authService.login(this.myForm.value.username,this.myForm.value.password).subscribe(data=>console.log('login 
    successful'));//email pass will be fetched from text boxes
  }
}

and then you can use it as below :

<form [formGroup]="myForm">
    <input id = "username" formGroupName="username" type="text" name="username" placeholder="username">
    <input id = "password" formGroupName="password" type="password" name="password" placeholder="password">
</form>
<button name="buttonLogin" type="button" (click)="login()" style="height:30px; width:100px;">Login</button>

  1. Template-driven forms

With this method, you have to bind your input thanks to the [(ngModel)] property :

<input type="text" class="form-control" id="username"
       required
       [(ngModel)]="username" name="username">

If needed, you can check the doc about forms in angular :)

Reactive form : https://angular.io/guide/reactive-forms

Template driven form : https://angular.io/guide/forms

PS : The click event on the submit button is working but the correct way to build a form is to set a (submit) event on the form and a button with type="submit" :)

Sign up to request clarification or add additional context in comments.

Comments

1

Use Two way binding to get the values for username, password.

 <form>
          <input id = "username" type="text" name="username" [(ngModel)]="username" placeholder="username">
          <input id = "password" type="password" name="password" [(ngModel)]="password" placeholder="password">
 </form>

Also refer to Angular forms documentation to find more information and types of forms. https://angular.io/guide/forms-overview

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.