잡동사니

반응형

질문

그래서, 작동하려면이 양식이 필요합니다. 하지만 각도 응용 프로그램을 실행할 때마다 빈 페이지 만 표시됩니다. 양식이 표시되는 페이지

재미있는 점은 < form [formGroup] = "registerForm"(ngSubmit) = "onSubmit ()"> 줄을 편집 할 때마다 다음과 같이 남겨 두는 것입니다. < form (ngSubmit) = "onSubmit ()"> , 양식이 나타나지만 등록 button이 작동하지 않습니다.

내 HTML 양식은 다음과 같습니다.

<div class="wrapper">
    <div class="page-header" style="background-image: url('./assets/img/login-image.jpg');">
        <div class="filter"></div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-4 col-sm-6 mr-auto ml-auto">
                      <div class="card card-register">
                            <h3 class="title">Registre-se na MPG!</h3>
                            <form [formGroup]="registerForm" (ngSubmit)="onSubmit()">
                                <label for="firstName">Nome</label>
                                <div class="input-group form-group-no-border">
                                <div class="input-group-prepend">
                                </div>
                                <input type="text" id="firstName" class="form-control" placeholder="Nome" (focus)="focus=true" (blur)="focus=false" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
                            </div>
                            <div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
                                <div *ngIf="f.firstName.errors.required">O primeiro nome é obrigatório.</div>
                            </div>
                            <label for="lastName">Sobrenome</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                <div class="input-group-prepend">
                                </div>
                                    <input type="text" id="lastName" class="form-control" placeholder="Sobrenome" (focus)="focus=true" (blur)="focus=false">
                                </div>
                                <div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
                                <div *ngIf="f.lastName.errors.required">O sobrenome é obrigatório.</div>
                            </div>

                            <label for="bday">Data de Nascimento</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                <div class="input-group-prepend">
                                </div>
                                    <input type="date" id="bday" class="form-control" (focus)="focus=true" (blur)="focus=false">
                                </div>
                                <div *ngIf="submitted && f.bday.errors" class="invalid-feedback">
                                <div *ngIf="f.bday.errors.required">A data de nascimento é obrigatório.</div>
                            </div>
                            <label for="email">Email</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                              <div class="input-group-prepend">
                                <span class="input-group-text">
                                    <i class="nc-icon nc-email-85"></i>
                                </span>
                              </div>
                            <input type="text" id="email" class="form-control" placeholder="Email" (focus)="focus=true" (blur)="focus=false" >
                            <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
                              <div *ngIf="f.email.errors.required">O e-mail é obrigatório.</div>
                          </div>
                          </div>

                            <label for="password">Senha</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus1===true}">
                              <div class="input-group-prepend">
                                <span class="input-group-text">
                                    <i class="nc-icon nc-key-25"></i>
                                </span>
                              </div>
                                <input type="password" id="password" class="form-control" placeholder="Senha" (focus)="focus1=true" (blur)="focus1=false" >
                            </div>
                            <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
                              <div *ngIf="f.password.errors.required">Uma senha é obrigatória.</div>
                              <div *ngIf="f.password.errors.minlength">A senha deve possuir no mínimo 6 caracteres.</div>
                          </div>
                          <button type="submit" [disabled]="loading" class="btn btn-danger btn-block btn-round">
                              <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
                              Registre-se
                          </button>
                          </form>
                          
                          <div class="forgot">
                              <a href="#" class="btn btn-link btn-danger">Esqueceu sua senha?</a>
                          </div>
                      </div>
                    </div>
                </div>
                <div class="footer register-footer text-center">
                    <h6>&copy;{{test | date: 'yyyy'}}, feito com <i class="fa fa-heart heart"></i> pela MPG</h6>
                </div>
            </div>
    </div>
</div>

내 signup.component.ts :

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
import { first } from 'rxjs/operators';

import { AlertService, UserService, AuthenticationService } from 'app/components/services';

@Component({
    selector: 'app-signup',
    templateUrl: './signup.component.html',
    styleUrls: ['./signup.component.scss']
})
export class SignupComponent implements OnInit {
    test : Date = new Date();
    focus;
    focus1;
    registerForm: FormGroup;
    loading = false;
    submitted = false;

    constructor(
        private formBuilder: FormBuilder,
        private router: Router,
        private authenticationService: AuthenticationService,
        private userService: UserService,
        private alertService: AlertService
    ) {
        // redirect to home if already logged in
        if (this.authenticationService.currentUserValue) {
            this.router.navigate(['/']);
        }
    }
    ngOnInit() {
        this.registerForm = this.formBuilder.group({
            firstName: ['', Validators.required],
            lastName: ['', Validators.required],
            email: ['', Validators.required],
            password: ['', [Validators.required, Validators.minLength(6)]]
        });
    }

    // convenience getter for easy access to form fields
    get f() { return this.registerForm.controls; }

    onSubmit() {
        this.submitted = true;

        // reset alerts on submit
        this.alertService.clear();

        // stop here if form is invalid
        if (this.registerForm.invalid) {
            return;
        }

        this.loading = true;
        this.userService.register(this.registerForm.value)
            .pipe(first())
            .subscribe(
                data => {
                    this.alertService.success('Registro feito com sucesso!', true);
                    this.router.navigate(['/login']);
                },
                error => {
                    this.alertService.error(error);
                    this.loading = false;
                });
    }
}

답변1

양식 그룹이 생성되기 전에 양식이 렌더링을 시도하지 않도록 양식에 * ngIf = "registerForm"을 입력합니다.



답변2

위에서 언급 한 formControlNames와 같은 코드에 오류가있는 경우 빈 화면이 표시 될 수 있습니다. Chrome에서 F12를 눌러 runtime에 무엇이 실패하는지 확인하십시오. 예를 들어, 코드를 복사 할 때 라우터를 사용하고 있다는 사실을 몰랐고 설치하지 않았습니다. component를 만들 때 실패하고 빈 화면이 나타납니다. F12는 범인을 보여주었습니다.



답변3

Sooo, 나는 너희들이 나에게 말한 것을 추가했다. 그리고 이것은 일어난 일이다 : / 양식이 사라지고 바닥 글에 쓰여진 것의 절반이 사라졌다. 양식이 사라지고 바닥 글에 쓰여진 내용의 절반이 사라졌습니다.

다음은 새로운 코드입니다.

<div class="wrapper">
    <div class="page-header" style="background-image: url('./assets/img/login-image.jpg');">
        <div class="filter"></div>
            <div class="container">
                <div class="row">
                    <div class="col-lg-4 col-sm-6 mr-auto ml-auto">
                        <div class="card card-register">
                            <h3 class="title">Registre-se na MPG!</h3>
                            <form *ngIf="registerForm" (ngSubmit)="onSubmit()">
                                
                                <label for="firstName">Nome</label>
                                <div class="input-group form-group-no-border">
                                    <div class="input-group-prepend"></div>
                                    <input formControlName="firstName" type="text" class="form-control" placeholder="Nome" (focus)="focus=true" (blur)="focus=false" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
                                </div>
                                    <div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
                                    <div *ngIf="f.firstName.errors.required">O primeiro nome é obrigatório.</div>
                                </div>
                                
                                <label for="lastName">Sobrenome</label>
                                <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                    <div class="input-group-prepend"></div>
                                    <input formControlName="lastName" type="text" class="form-control" placeholder="Sobrenome" (focus)="focus=true" (blur)="focus=false">
                                </div>
                                    <div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
                                    <div *ngIf="f.lastName.errors.required">O sobrenome é obrigatório.</div>
                                </div>

                                <label for="bday">Data de Nascimento</label>
                                <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                    <div class="input-group-prepend"></div>
                                    <input formControlName="bday" type="date" class="form-control" (focus)="focus=true" (blur)="focus=false">
                                </div>
                                    <div *ngIf="submitted && f.bday.errors" class="invalid-feedback">
                                    <div *ngIf="f.bday.errors.required">A data de nascimento é obrigatório.</div>
                                </div>

                                <label for="email">Email</label>
                                <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                    <div class="input-group-prepend">
                                    <span class="input-group-text">
                                        <i class="nc-icon nc-email-85"></i>
                                    </span>
                                </div>
                                    <input formControlName="email" type="text" class="form-control" placeholder="Email" (focus)="focus=true" (blur)="focus=false" >
                                </div>
                                    <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
                                    <div *ngIf="f.email.errors.required">O e-mail é obrigatório.</div>
                                </div>
                                
                                <label for="password">Senha</label>
                                <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus1===true}">
                                    <div class="input-group-prepend">
                                    <span class="input-group-text">
                                        <i class="nc-icon nc-key-25"></i>
                                    </span>
                                </div>
                                    <input formControlName="password" type="password" class="form-control" placeholder="Senha" (focus)="focus1=true" (blur)="focus1=false" >
                                </div>
                                    <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
                                    <div *ngIf="f.password.errors.required">Uma senha é obrigatória.</div>
                                    <div *ngIf="f.password.errors.minlength">A senha deve possuir no mínimo 6 caracteres.</div>
                                </div>
                                
                                <button type="submit" [disabled]="loading" class="btn btn-danger btn-block btn-round">
                                    <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
                                        Registre-se
                                </button>
                            </form>
                          
                            <div class="forgot">
                                <a href="#" class="btn btn-link btn-danger">Voltar</a>
                            </div>
                        </div>
                    </div>
                </div>
                
                <div class="footer register-footer text-center">
                    <h6>{{test | date: 'yyyy'}}, feito com <i class="fa fa-heart heart"></i> pela MPG</h6>
                </div>
            </div>
    </div>
</div>

더 이상 무엇을 해야할지 모르겠습니다.



답변4

각 입력 요소의 formControlName 태그를 놓쳤습니다.

<label for="firstName">Nome</label>
<div class="input-group form-group-no-border">
    <div class="input-group-prepend"></div>
    <input formControlName="firstName" type="text" id="firstName" class="form-control" placeholder="Nome" (focus)="focus=true" (blur)="focus=false" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
</div>

마지막 댓글 기준 :

양식에 [formGroup] 태그를 유지합니다 (* ngIf 는 필요하지 않음).

<div class="wrapper">
    <div class="page-header" style="background-image: url('./assets/img/login-image.jpg');">
        <div class="filter"></div>
        <div class="container">
            <div class="row">
                <div class="col-lg-4 col-sm-6 mr-auto ml-auto">
                    <div class="card card-register">
                        <h3 class="title">Registre-se na MPG!</h3>
                        <form [formGroup]="registerForm" (ngSubmit)="onSubmit()">
                            <label for="firstName">Nome</label>
                            <div class="input-group form-group-no-border">
                                <div class="input-group-prepend"></div>
                                <input formControlName="firstName" type="text" class="form-control" placeholder="Nome" (focus)="focus=true" (blur)="focus=false" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
                            </div>
                            <div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
                                <div *ngIf="f.firstName.errors.required">O primeiro nome é obrigatório.</div>
                            </div>
                            
                            <label for="lastName">Sobrenome</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                <div class="input-group-prepend"></div>
                                <input formControlName="lastName" type="text" class="form-control" placeholder="Sobrenome" (focus)="focus=true" (blur)="focus=false">
                            </div>
                            <div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
                                <div *ngIf="f.lastName.errors.required">O sobrenome é obrigatório.</div>
                            </div>
                            
                            <label for="bday">Data de Nascimento</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                <div class="input-group-prepend"></div>
                                <input formControlName="bday" type="date" class="form-control" (focus)="focus=true" (blur)="focus=false">
                            </div>
                            <div *ngIf="submitted && f.bday.errors" class="invalid-feedback">
                                <div *ngIf="f.bday.errors.required">A data de nascimento é obrigatório.</div>
                            </div>
                            
                            <label for="email">Email</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus===true}">
                                <div class="input-group-prepend">
                                    <span class="input-group-text">
                                        <i class="nc-icon nc-email-85"></i>
                                    </span>
                                </div>
                                <input formControlName="email" type="text" class="form-control" placeholder="Email" (focus)="focus=true" (blur)="focus=false" >
                            </div>
                            <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
                                <div *ngIf="f.email.errors.required">O e-mail é obrigatório.</div>
                            </div>
                            
                            <label for="password">Senha</label>
                            <div class="input-group form-group-no-border" [ngClass]="{'input-group-focus':focus1===true}">
                                <div class="input-group-prepend">
                                    <span class="input-group-text">
                                        <i class="nc-icon nc-key-25"></i>
                                    </span>
                                </div>
                                <input formControlName="password" type="password" class="form-control" placeholder="Senha" (focus)="focus1=true" (blur)="focus1=false" >
                            </div>
                            <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
                                <div *ngIf="f.password.errors.required">Uma senha é obrigatória.</div>
                                <div *ngIf="f.password.errors.minlength">A senha deve possuir no mínimo 6 caracteres.</div>
                            </div>
                            
                            <button type="submit" [disabled]="loading" class="btn btn-danger btn-block btn-round">
                                <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
                                Registre-se
                            </button>
                        </form>
                        
                        <div class="forgot">
                            <a href="#" class="btn btn-link btn-danger">Voltar</a>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="footer register-footer text-center">
                <h6>{{test | date: 'yyyy'}}, feito com <i class="fa fa-heart heart"></i> pela MPG</h6>
            </div>
        </div>
    </div>
</div>

또한 bday 컨트롤을 사용하고 있고 양식 선언에 포함되어 있지 않으므로 signup.component.ts를 살펴보세요.

다음과 같아야합니다.

this.registerForm = this.formBuilder.group({
    firstName: ['', Validators.required],
    lastName: ['', Validators.required],
    email: ['', Validators.required],
    password: ['', [Validators.required, Validators.minLength(6)]],
    bday: ['', Validadors.required]
});


 

 

 

 

출처 : https://stackoverflow.com/questions/62686645/my-form-doesnt-work-im-using-angular-html-typescript

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band