我正试图通过遵循构建全栈应用程序的在线教程来使用ngForm,但保存按钮没有触发,我对angular 8完全陌生
我的表单代码adduer.component.html
<h1>Add User</h1>
<form #recievedUser="ngForm">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" placeholder="user name" [(ngModel)]="user.name" name="name">
<label for="type">Type</label>
<input type="text" class="form-control" id="type" placeholder="type name" [(ngModel)]="user.type" name="name">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" placeholder="password" [(ngModel)]="user.password" name="password">
<br>
<button type="button" class="btn btn-success" (click)="addUser()">Save</button>
</form>
我的adduser。Component.ts文件
import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';
import { User } from '../../../model/User';
import { HttpClientService } from '../../../service/http-client.service';
import { Router } from '@angular/router';
@Component({
selector: 'app-adduser',
templateUrl: './adduser.component.html',
styleUrls: ['./adduser.component.css']
})
export class AdduserComponent implements OnInit {
@Input()
user: User
@Output()
userAddedEvent = new EventEmitter();
newUser: User;
message: string;
password: string;
constructor(private httpClientService: HttpClientService,
private router: Router) { }
ngOnInit() {
this.newUser = Object.assign({}, this.user);
}
addUser() {
this.httpClientService.addUser(this.newUser).subscribe(
(user) => {
this.userAddedEvent.emit();
this.router.navigate(['admin', 'users']);
}
);
}
}
应用程序模块.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MenuComponent } from './menu/menu.component';
import { UsersComponent } from './admin/users/users.component';
import {HttpClientModule} from '@angular/common/http';
import { AdduserComponent } from './admin/users/adduser/adduser.component';
import {FormsModule} from '@angular/forms';
@NgModule({
declarations: [
AppComponent,
MenuComponent,
UsersComponent,
AdduserComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
我正在按照这个链接建立一个应用程序
我没有看到指令ngForm的ngSubmit Output被声明。试着把它放在你的表单HTML标记中。
<form #recievedUser="ngForm" (ngSubmit)="addUser()">
然后删除点击按钮事件
<button type="button" class="btn btn-success">Save</button>
试试看。
user
是一个输入,您将this.newUser = Object.assign({}, this.user);
分配给ngOnInit
中的this.newUser
。这意味着this.newUser
获得了user
的原始输入值,当您在addUser()
中使用它时不会获得新值(您可以查看更多关于ngOnInit
的信息(- 要从ngForm获取值,可以像
(click)="addUser(recievedUser)"
一样传递表单,然后通过recievedUser.controls.[nameOfControl].[value]
(例如:recievedUser.controls.name.value
(访问其值。您可以使用console.log(recievedUser.controls.name)
来查看它
要解决您的问题,您可以:
-
将
this.newUser = Object.assign({}, this.user);
移动到addUser()
中,以便获得最新值addUser() {
this.newUser = Object.assign({}, this.user); this.httpClientService.addUser(this.newUser).subscribe( (user) => { this.userAddedEvent.emit(); this.router.navigate(['admin', 'users']); });
}
或2。将this.newUser = Object.assign({}, this.user);
保留在ngOnInit
中,并将结合从user
更改为newUser
([(ngModel)]="newUser.name"
(。