我使用Nebular创建登录表单。但 Nebular 的形式使用电子邮件验证。我想禁用电子邮件验证,因为我的网站使用username
.
1 回答
我不相信有一个简单的配置选项可以更改user
登录表单的属性。如果您查看登录表单的来源,您会发现user
它只是一个类型的对象any
。这意味着您可以扩展 并将字段的绑定NbLoginComponent
更改为。(请参阅下面的工作堆栈闪电战)。[(ngModel)]
email
username
您必须创建自己的登录组件,扩展NbLoginComponent
. 对于自定义登录组件,您不需要ts
文件中的任何内容,您只需提供一个新模板并继承NbLoginComponent
. 在模板中,您可以更改电子邮件输入的模型绑定并从输入中删除电子邮件验证 ( pattern=".+@.+\..+"
)。
用户名-login.component.ts
import { Component } from '@angular/core';
import { NbLoginComponent } from '@nebular/auth';
@Component({
selector: 'username-login',
templateUrl: './login.component.html',
})
export class UsernameLoginComponent extends NbLoginComponent {
}
用户名-login.component.html
... omitted
<form (ngSubmit)="login()" #form="ngForm" aria-labelledby="title">
<div class="form-control-group">
<label class="label" for="input-email">Email address:</label>
<input nbInput
fullWidth
[(ngModel)]="user.username"
#username="ngModel"
name="username"
id="input-username"
placeholder="Username"
fieldSize="large"
autofocus
[status]="username.dirty ? (username.invalid ? 'danger' : 'success') : 'basic'"
[required]="getConfigValue('forms.validation.username.required')"
[attr.aria-invalid]="username.invalid && username.touched ? true : null">
<ng-container *ngIf="username.invalid && username.touched">
<p class="caption status-danger" *ngIf="username.errors?.required">
Username is required!
</p>
</ng-container>
</div>
...
</form>
然后在您的路由中,只需路由到您的自定义登录组件
应用程序路由.module.ts
const routes: Routes = [
{
path: '',
redirectTo: 'auth',
pathMatch: 'full',
},
{
path: 'auth',
component: NbAuthComponent,
children: [
{
path: '',
component: UsernameLoginComponent,
}
],
},
];
在下面的 stackblitz 中,我有一个工作示例。按下登录按钮后,我有一个警报,显示在发布请求中发送的对象。您还可以在开发工具的 Network 选项卡中检查请求以查看请求正文。
STACKBLITZ:https ://stackblitz.com/edit/nebular-dynamic-auth-api-laoksx
https://github.com/akveo/nebular/tree/master/src/framework/auth/components
https://akveo.github.io/nebular/docs/auth/custom-auth-components#create-auth-module