You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular12项目点击登录按钮后无法跳转到home页面问题求助

问题根因及修复方案

1. 表单默认提交行为触发页面刷新

你的登录按钮是type="submit",放在<form>标签内,点击后会触发浏览器默认的表单提交行为,导致页面刷新,打断Angular的路由跳转逻辑。
修复方式:在点击事件里阻止默认行为,修改loginbox.component.html的登录按钮代码:

<input type="submit" class="fadeIn fourth mt-4 mb-4" value="Log In" (click)="loginClick($event)">

然后修改loginbox.component.ts的loginClick方法:

loginClick(e: Event){
  e.preventDefault(); // 阻止表单默认提交
  // 其余原有逻辑保持不变
}

2. 输入框未做双向绑定,无法获取用户输入内容

你定义的emailOrUsername和password变量没有和页面输入框绑定,不管用户输入什么值,两个变量都为undefined,会直接触发空值校验弹窗,根本执行不到调用clickLoginFunction的逻辑。
修复方式:给两个输入框加上[(ngModel)]双向绑定,修改loginbox.component.html的输入框代码:

<input type="text" id="login" class="fadeIn second" name="login" placeholder="username" [(ngModel)]="emailOrUsername">
<input type="text" id="password" class="fadeIn third" name="login" placeholder="password" [(ngModel)]="password">

注意:如果你的项目没有导入FormsModule,需要在对应的模块文件里导入FormsModule,否则双向绑定不生效。

3. 父组件传递方法时丢失this指向

你在父组件login.component.html里直接传递login方法给子组件,方法执行时this会指向子组件实例,而子组件没有注入Router,调用this.router.navigate会抛出异常。
修复方式:传递方法时绑定this,修改login.component.html代码:

<loginbox [clickLoginFunction]="login.bind(this)"></loginbox>

也可以在父组件里把login方法定义为箭头函数,保留正确的this指向:

// login.component.ts
login = (): void => {
  console.log("HOLA");
  this.router.navigate(['/home']);
}

三个问题修复后即可正常跳转。

内容的提问来源于stack exchange,提问作者Gabriel García Garrido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:00:05