重定向到角度的另一个HTML

时间:2020-08-01 04:29:39

标签: angular

有人可以帮我吗,我想重定向到另一个错误页面的评论到底在哪里

<ng-container *ngIf="!loginService.verificarToken(); else postLogin">
        <ul class="navbar-nav mr-auto"><!--mr-auto-->
          <li class="nav-item">
            <a class="nav-link" routerLink="/HOME" routerLinkActive="active">HELLO</a>
          </li>
        </ul>
      </ng-container>
     <ng-template #postLogin>
      <ul class="navbar-nav mr-auto"><!--mr-auto-->
        <!--
          in case it is false I want you to redirect me to another html page
          ????
        -->
      </ul>
     </ng-template>

4 个答案:

答案 0 :(得分:1)

在Angular中,您有HTML,也有组件,其中大多数逻辑都在其中发生。您可以在HTML中插入逻辑以呈现内容,或根据特定条件或几乎任何DOM操作显示内容,但是您尝试执行的操作与DOM根本无关。

您要在组件而不是HTML中运行代码,请记住HTML中的逻辑主要用于呈现某些内容并操纵DOM。

因此,这是执行此操作的方法:

您希望什么时候运行函数?例如,如果您希望它在页面呈现时运行,请使用NgOnInit生命周期挂钩。这是它的简单实现。

export class App implements OnInit {
       constructor(private router: Router) { }
      ngOnInit() {
           if (!loginService.verificarToken()) {
              this.router.navigate(['/login']);
            }

      }
    }

几件事要注意:

  1. 我建议您在代码中运行这种类型的逻辑,但要使用Route Guard,它会在每个页面之前运行。查看: https://angular.io/guide/router#preventing-unauthorized-access

  2. 我不建议将函数放在HTML内,因为这样做不利于性能。而是在HTML中使用变量,然后在组件中运行该函数。

答案 1 :(得分:0)

在您的app-routing.module.ts中添加您的路线:

    import { pageNameComponent} from './pageNameComponent.component';
    import { AppComponent } from './app.component';
    import { NgModule }             from '@angular/core';
    import { RouterModule, Routes } from '@angular/router';
    
    const routes: Routes = [
      { path: '', redirectTo: '/AppComponent', pathMatch: 'full' },
      { path: 'pageName', component: pageNameComponent },
    
    ];
    
    @NgModule({
      imports: [ RouterModule.forRoot(routes) ],
      exports: [ RouterModule ]
    })
    export class AppRoutingModule {}

在您的html中:

    <ul class="navbar-nav mr-auto"><!--mr-auto-->
       <a routerLink="/pageName" class="nav-link" href="#">pageName</a>
   </ul>

答案 2 :(得分:0)

在您的控制器中

从'@ angular / router'导入{RouterModule,Routes}; 构造函数(专用路由器:路由器)

postloginRedirect(){
  router.navigate(['/routeforPostlogin']);
}

在您的HTML中 << / p>

ng-template #postLogin>
          <ul class="navbar-nav mr-auto"><!--mr-auto-->
    <span [hidden]="postloginRedirect()"></span>        
    <!--
              in case it is false I want you to redirect me to another html page
              ????
            -->
          </ul>
         </ng-template>

答案 3 :(得分:0)

您应该采用使用Router-> CanActivate

的Angular方法

警卫AuthGuard

import { Injectable } from '@angular/core'
import { Router } from '@angular/router'
import {
  CanActivate, ActivatedRouteSnapshot,
  RouterStateSnapshot
} from '@angular/router'

import { LoginService } from './login.service' // <-- your service

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor(
    private router: Router,
    private loginService: LoginService
  ) { }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
      const isLoggedIn = this.loginService.verificarToken() // <-- verificarToken boolean

      if (!isLoggedIn) {
        this.router.navigate(['login') // <-- redirect to login
      }

      return isLoggedIn
  }
}

然后在您的路线上:

const appRoutes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'login', component: LoginComponent },
  {
    path: 'dashboard', component: UsersComponent,
    canActivate: [AuthGuard], // <-- your guard redirect
  },
  // ...
]