我有一个Angular表单,有两个输入,用户名和密码,当用户提交表单时,值会通过POST发送到Sping Boot REST控制器。我想在数据被发送到控制器之前修剪数据,但我找不到怎么做。
这是我的form-component.html:
<form #loginForm="ngForm" (ngSubmit)="onSubmit()" name="loginForm">
<input required ngModel [(ngModel)]="user.username" name="loginUsername" #loginUsername="ngModel" type="text" placeholder="Username">
<div class="alert alert-danger" role="alert" *ngIf="loginUsername.invalid && (loginUsername.dirty || loginUsername.touched)">Username not inserted</div>
<input required ngModel [(ngModel)]="user.password" name="loginPassword" #loginPassword="ngModel" type="text" placeholder="Password">
<div class="alert alert-danger" role="alert" *ngIf="loginPassword.invalid && (loginPassword.dirty || loginPassword.touched)">Password not inserted</div>
<button class="btn btn-primary" type="submit">Login</button>
</form>
字符串
这是我的form-component.ts:
export class LoginFormComponent implements OnInit{
user: User;
constructor(private route: ActivatedRoute,
private router: Router,
private login: LoginService){
this.user = new User();
};
ngOnInit(): void { };
onSubmit() {
this.login.send(this.user).subscribe(result => this.router.navigate(['/http://localhost:8080/login']));
}
}
型
这是我的用户。ts:
export class User {
username: string;
password: string;
constructor(){
this.username = "";
this.password = "";
}
}
型
这是我的登录服务。ts:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../classes/user';
@Injectable({
providedIn: 'root'
})
export class LoginService {
private loginUrl: string;
constructor(private http: HttpClient) {
this.loginUrl = 'http://localhost:8080/login';
}
public send(user: User) {
return this.http.post<User>(this.loginUrl, user);
}
}
型
这是我的Spring REST控制器:
@EnableDiscoveryClient
@SpringBootApplication
@RestController
@RequestMapping
@CrossOrigin(origins = "http://localhost:4200")
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
@PostMapping("/login")
public void postUser(@RequestBody User user) {
System.out.println("Username:" + user.getUsername());
System.out.println("Password:" + user.getPassword());
}
}
型
4条答案
按热度按时间dffbzjpn1#
你可以使用响应式表单来处理你的表单,它更容易处理表单。
它看起来像这样:
form-component.html:
字符串
form-component.ts:
型
然后,您可以创建一个自定义验证器,自动修剪您的输入。
自定义验证器:
型
你把它放在数组中,在上面的表单组创建。在angular中使用响应式表单也是一个很好的实践,它更容易让你在表单中处理验证,并且使用相同的表单来创建和更新也非常有用。(您可以在创建表单组时填充输入,空字符串表示输入为空)。
js81xvg62#
字符串
gcxthw6b3#
或通过提交函数中的循环
字符串
yrdbyhpb4#
我做了一个自定义的表单验证器,它总是返回null(无错误)。在验证器中,我为输入设置值。
字符串