html - Angular:通过单击另一个按钮执行的提交方法

标签 html angular angular-material

我将 Angular 与 Angular Material 组件一起使用。
因此,我添加了一个登录组件(表单),用户可以在其中输入他的电子邮件和密码。密码的输入字段在末尾有一个眼睛,使用户能够在需要时以纯文本形式显示密码。
不幸的是,通过单击眼睛按钮两次,提交方法会执行,该方法绑定(bind)到提交按钮。

一个简单的问题是:为什么?

模板

<form [formGroup]='loginForm' (ngSubmit)="onSubmit()">
<div>
    <mat-form-field>
        <mat-label for="email">E-Mail</mat-label>
        <input matInput type="text" formControlField="email" />
        <mat-error>
            Test
        </mat-error>
    </mat-form-field>
</div>

<div>
    <mat-form-field>
        <mat-label for="password">Password</mat-label>
        <input matInput [type]="hide ? 'password' : 'text'" formControlField="password" />
        <button mat-icon-button matSuffix class="mat-icon-button mat-button-base" (click)="hide = !hide" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="hide">
            <mat-icon>{{ hide ? 'visibility_off' : 'visibility' }}</mat-icon>
        </button>
    </mat-form-field>
</div>

<button mat-raised-button color="primary" type="submit">Login</button>

组件
export class LoginComponent implements OnInit {

loginForm: FormGroup;
hide = true;

constructor(
 private formBuilder: FormBuilder
) { 
   this.loginForm = this.formBuilder.group({
   email: ['', [Validators.required, Validators.email]],
   password: ['', [Validators.required]]
 })
}

onSubmit() {
 window.alert("Login button clicked");
}

最佳答案

尝试添加
type="button"
到你的“眼睛”按钮

这将告诉浏览器在表单内时不要将其视为提交按钮。

关于html - Angular:通过单击另一个按钮执行的提交方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60109277/

相关文章:

angular - Ionic 3 - Pan 事件

html - 水平溢出多个内联垂直列表

javascript - 如何使用Javascript改变伪元素内容?

html - AngularJs ui-bootstrap Typeahead 带滚动

html - css div 禁用表格行 colspan

angular - 同一个 NgRx 特性模块的独立实例

javascript - 无法绑定(bind)到 'mdMenuTriggerFor',因为它不是 'button' 的已知属性

angular - 如何知道是否从点击事件中选择了垫选项?

angular-material - 如何在角度 Material 表的垫表列中添加子列

javascript - Material AngularJS ngShow 和 ngHide