javascript - Angular - 根据操作显示/隐藏表单

标签 javascript angular typescript


我正在使用 Angular 4 实现一个简单的登录/注册应用程序。我想要实现的是让默认 View 显示登录表单,并且只有当我单击注册链接时我才想显示注册表单,它必须替换登录表单。
现在我必须单击登录链接才能显示它。我将粘贴一些代码。

应用模块

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule }   from '@angular/forms';
import { RouterModule }   from '@angular/router';

import { AppComponent } from './components/app/app.component';
import { LoginComponent } from './components/login/login.component';
import { RegisterComponent } from './components/register/register.component';
import { HomeComponent } from './components/home/home.component';
import { UserService } from './services/user/user.service';
import { User } from './services/user/user';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    RouterModule.forRoot([
      {
        path: 'login',
        component: LoginComponent
      },
      {
        path: 'register',
        component: RegisterComponent
      },
      {
        path: 'home',
        component: HomeComponent
      }
    ])
  ],
  declarations: [
    AppComponent,
    LoginComponent,
    RegisterComponent,
    HomeComponent
  ],
  providers: [UserService, User],
  bootstrap: [AppComponent]
})

export class AppModule { }

应用组件模板

<div id="container">
  <div id="parent">
    <div id="left"></div>
    <div id="right">
      <nav>
        <a routerLink="/login" routerLinkActive="active">Login</a>
        <a routerLink="/register" routerLinkActive="active">Register</a>
      </nav>
      <router-outlet></router-outlet>
    </div>
  </div>
</div>

登录组件模板

<form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm)">
  <div>
    <label for="username">Username</label>
    <input id="username" name="username" ngModel #username="ngModel">
  </div>
  <div>
    <label for="password">Password</label>
    <input id="password" name="password" ngModel #password="ngModel">
  </div>
  <span *ngIf="onSubmit(loginForm)">true</span>
  <button>Login</button>
</form>

注册组件模板

<form #registerForm="ngForm" (ngSubmit)="onSubmit(registerForm)">
  <div>
    <label for="name">Nome</label>
    <input id="name" name="name" ngModel #name="ngModel">
  </div>
  <div>
    <label for="lastName">Cognome</label>
    <input id="lastName" name="lastName" ngModel #lastName="ngModel">
  </div>
  <div>
    <label for="username">Username</label>
    <input id="username" name="username" ngModel #username="ngModel">
  </div>
  <div>
    <label for="password">Password</label>
    <input id="password" name="password" ngModel #password="ngModel">
  </div>
  <div>
    <label for="passwordRep">Ripeti la password</label>
    <input id="passwordRep" name="passwordRep">
  </div>
  <button>Registrati</button>
</form>

我是否缺少一些路由器模块设置?
提前致谢。

最佳答案

在您的路由中,您需要 redirect 用户访问登录页面(如果您希望将其作为默认 View )。因此请尝试以下操作:

RouterModule.forRoot([
  { 
    path: '',
    redirectTo: 'login',
    pathMatch: 'full'
  }, 
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'register',
    component: RegisterComponent
  },
  {
    path: 'home',
    component: HomeComponent
  }
])

关于javascript - Angular - 根据操作显示/隐藏表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45276556/

相关文章:

javascript - 如何使用javascript检测图像内图标的宽度?

node.js - 处理 Angular 5 服务发布请求中的离线服务器

reactjs - 未捕获的类型错误 : *** is not a function in a React component

Angular 8 解析器不工作 : No provider for Resolver

javascript - 有没有 JS 函数或方法返回 4 位数字格式的数字?

javascript - 来自外部 javascript 文件的 Django ajax 请求

javascript - TypeScript:TypedArray 的泛型类型定义

javascript - 为什么我的新闻通讯表单在 Amazon CloudFront 上不起作用?

php - 进行 Angular 6 php mysql api 调用

angular - 将 javascript 生成的元素插入 primeng turbotable?