#javascript #angular #angular-template-form
#javascript #angular #angular-template-form
Вопрос:
Я пробовал другие решения, такие как исправление ссылок на формы, но это мне не помогло. Вот моя форма для входа в систему
<form [formGroup]="longinForm" (ngSubmit)="onSubmit()">
<h1>Login Form</h1>
<div class="form-group" >
<label for="name" >Username</label>
<input type="text" name ="user" [(ngModel)]="loginuserdata.user"
#user="ngModel"
class="form-control" required >
<div *ngIf="submitted">
<div [hidden]="user.valid || user.pristine" class="alert alert-danger">
Username is required
</div>
</div>
</div>
<div class="form-group" >
<label for="pass" >Password</label>
<input type="text" name="pass" [(ngModel)]="loginuserdata.pass" #pass="ngModel"
class="form-control" required >
<div *ngIf="submitted">
<div [hidden]="pass.valid || pass.pristine" class="alert alert-danger">
Password is required
</div>
</div>
</div>
<button type="submit" class="btn btn-success">Submit</button>
</form>
также здесь находится мой компонент входа в систему
import { Component, OnInit, ViewChild } from '@angular/core';
import { NgForm, FormGroup } from '@angular/forms';
import { Router } from '@angular/router';
import { LoginService } from './login.service';
import { ILoginData } from './login-data';
@Component({
selector: 'app-loginform',
templateUrl: './loginform.component.html',
styleUrls: ['./loginform.component.css']
})
export class LoginformComponent implements OnInit {
loginForm:FormGroup;
loginuserdata : any[] = [];
error:string;
submitted=false;
constructor(private route: Router,private service:LoginService) { }
get f(){return this.loginForm.controls;}
ngOnInit() {
this.onSubmit();
}
onSubmit(){
if(this.loginForm.invalid){return;}//form invalid stop here
//form is valid do something
this.submitted=true;
if(this.f.user.value == "Admin" amp;amp; this.f.pass.value == "Apassword"){
this.service.getAdmin()
.subscribe(data => this.loginuserdata = data)
this.route.navigateByUrl('admin');
err => this.error = err;
console.log(this.error);
}
}
}
Если вам, ребята, нужно увидеть какие-либо другие фрагменты моего кода, дайте мне знать, пожалуйста, помогите мне, я пробовал что-то похожее на решаемый ответ на это, но у меня это не сработало.
Комментарии:
1. зачем вызывать ` this.onSubmit();` внутри
ngOnInit()
2. где вы инициируете свою форму?
3. Я извлек this.onSubmit() из ngOnInit(). Которое исправило эту ошибку, на самом деле спасибо, но тогда я все еще получаю эту ошибку сейчас. ОШИБКА: FormGroup ожидает экземпляр FormGroup. Пожалуйста, передайте его.
4.
[formGroup]="loginForm"
5. также, чтобы ответить @NadhirFalta, я не думаю, что я инициирую это где-либо, должен ли я? когда вы говорите «инициирующий», вы имеете в виду <app-loginform></app-loginform> верно?
Ответ №1:
Вам нужно создать элементы управления формой, вы их определили, но вам нужно что-то вроде следующего. Вам необходимо инициализировать группу форм.
import { NgForm, FormGroup, FormBuilder } from '@angular/forms';
//Be sure to import formBuilder and inject through constructor. This will allow you
//to manage how you will build the form and add validation.
//Its a helper class provided by Angular to help us explicitly declare forms.
constructor( private formBuilder: FormBuilder ){}
public ngOnInit(): void {
this.loginForm = this.formBuilder.group({
username: ['', Validators.required],
password: ['', Validators.required]
});
Здесь вы можете определить элементы управления и средства проверки для группы форм. (Этот пример просто диктовал бы, что для каждого должно быть значение, чтобы быть действительным. Это должно быть встроено в ngOnInit
.
Затем в вашем шаблоне вы можете удалить [(ngModel)]
и придать ему следующий вид. Значение для ввода будет сохранено в элементе управления, когда вам потребуется получить к нему доступ.
<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
<input type="text" name ="user" [formControlName]="'username'"
class="form-control" required>
<form>
Приведенное выше могло бы служить примером для имени пользователя / электронной почты для входа.
Также, как упоминалось в комментариях, у вас опечатка в форме в HTML.
Затем это должно быть допустимо, когда вы пытаетесь получить доступ к свойствам valid
и invalid
группы from . Прокомментируйте, если у вас возникли какие-либо проблемы.
Комментарии:
1. Хорошо, спасибо, я попробую и дам вам знать, работает ли это
2. Также стоит упомянуть, что
formBuilder
здесь3. Хорошим способом проверки было бы заполнить входные данные и отправить форму, затем добавить console.log(this.LoginForm) в начале вашей функции отправки. Затем вы можете проверить значение элемента управления, чтобы убедиться, что оно проходит. Амит Чигадани, пожалуйста, предложите и отредактируйте, или я добавлю больше информации в ближайшее время 🙂
4. привет @dince12 в моем компоненте вот мое новое изменение ngOnInit() { this.LoginForm = new FormGroup({ имя пользователя: новый FormControl(«), пароль: новый FormControl(«), }); } затем onSubmit(){console.log(this.LoginForm.value)} Я получаю эту ошибку LoginformComponent.html:2 КОНТЕКСТ ОШИБКИ DebugContext_ {view: {…}, nodeIndex: 2, NodeDef: {…}, elDef: {…}, elView: {…}} также перед отправкой я все еще получаю эту ошибку LoginformComponent.html: ОШИБКА 2: FormGroup ожидает экземпляр FormGroup. Пожалуйста, передайте его. Не уверен, почему, поскольку я следую документации, которую вы отправили.
5. @dince12 Я наконец-то заработал без ошибок, спасибо за вашу помощь в начале, хотя и не понимал, что мне нужны элементы управления формой.
Ответ №2:
Как насчет того, чтобы сделать это.
ngAfterViewInit() {
this.onSubmit()
}
Я думаю, что это еще не было определено в ngOnInit. Проверьте жизненный цикл.