angular+ 路由学习 多路由出口学习

Posted gushiyoyo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angular+ 路由学习 多路由出口学习相关的知识,希望对你有一定的参考价值。

  • 关于第二路由,即命令路由和主路由无命名的区别:
    • 命名路由和主路由互不依赖
    • 命名路由可以和其他路由组合使用,而主路由只能支持一条无命名路由
    • 命名路由可以显示在命令出口中
  • 通俗的说;<router-outlet></router-outlet>是模块的路由出口;现在我想再加一个模块;这个模块也放在主模块中;即使用命名路由作为第二路由出口,显示这个模块在主要模块中;
  • 使用方法:在主页面中app.component.html中,添加第二路由出口,并添加导航
  • <!--The content below is only a placeholder and can be replaced.-->
    <h1>Angular Router</h1>
    <nav>
      <!-- 路由跳转一 -->
    <a [routerLink]="[ ‘/crisis-center‘ ]" routerLinkActive="active">Crisis Center</a>
    <a [routerLink]="[ ‘/heroes‘ ]" routerLinkActive="active">heroes</a>
    <!-- 第二路由的导航显示 -->
    <a [routerLink]="[ outlets:  popup: [‘compose‘]]">第二路由Contact</a>
      <!-- 路由跳转二 -->
    <!-- <a routerLink="/crisis-center" routerLinkActive="active">Crisis Center</a>
    <a routerLink="/heroes" routerLinkActive="active">heroes</a> -->
    </nav>
    <!-- 路由出口,占位符,可将显示在出口的组件显示在这里 -->
    <!-- 转场:让@routeAnimation 触发器绑定到需要应用路由动画到元素上,routerOutlet 导出成outlet 变量,绑定一个到路由出口的引用
        函数根据activatedRoute 提供的data对象来返回动画属性
    -->
    <div [@routeAnimation]="getAnimationData(routerOutlet)">
        <router-outlet #routerOutlet="outlet"></router-outlet>
      </div>
    <!-- 每个模块,路由器只能支持一个无名主路由出口,模块可以有多个命名路由出口,以此可以同时根据不同路由显示不同内容 -->
      <!-- 第二路由出口: 不依赖主路由,可以和其他路由组合使用,显示在命令出口位置 -->
      <router-outlet name="popup"></router-outlet>

     

  • 创建一个组件,让这个组件作为这个第二路由出口的显示;ng g component compose-message
  • 将第二路由导入主模块的路由中;
  • import  NgModule  from ‘@angular/core‘;
    import  Routes, RouterModule  from ‘@angular/router‘;
    
    
    import  PageNotFoundComponent  from ‘./page-not-found/page-not-found.component‘;
    import  ComposeMessageComponent  from ‘./compose-message/compose-message.component‘;
    // 添加第二路由
    const routes: Routes = [
       path: ‘compose‘ , component: ComposeMessageComponent, outlet: ‘popup‘,
       path: ‘‘, redirectTo: ‘heroes‘, pathMatch: ‘full‘ ,
       path: ‘**‘, component: PageNotFoundComponent 
    
    ];
    // .forRoot()-- 在应用的顶级配置路由器,提供路由需要的服务提供商和指令,基于浏览器当前URL执行首次导航
    // enableTarcing -- 查看导航在生命周期中发生的事件,并输出到控制台
    @NgModule(
      imports: [
        RouterModule.forRoot(routes,  enableTracing: false )
      ],
      exports: [RouterModule]
    )
    export class AppRoutingModule  

     

  • compose-message 组件代码
  • <h3>Contact Crisis Center</h3>
    <div *ngIf="details">
       details 
    </div>
    <div>
      <div>
        <label>Message: </label>
      </div>
      <div>
        <textarea [(ngModel)]="message" rows="10" cols="35" [disabled]="sending"></textarea>
      </div>
    </div>
    <p *ngIf="!sending">
      <button (click)="send()">Send</button>
      <button (click)="cancel()">Cancel</button>
    </p>

     

  • import  Component, HostBinding  from ‘@angular/core‘;
    import  Router  from ‘@angular/router‘;
    
    @Component(
      selector: ‘app-compose-message‘,
      templateUrl: ‘./compose-message.component.html‘,
      styleUrls: [‘./compose-message.component.css‘]
    )
    export class ComposeMessageComponent 
      details: string;
      message: string;
      sending = false;
    
      constructor(private router: Router)  
    
      send() 
        this.sending = true;
        this.details = ‘Sending Message...‘;
    
        setTimeout(() => 
          this.sending = false;
          this.closePopup();
        , 1000);
      
    
      cancel() 
        this.closePopup();
      
    //  清除第二路由;即移除路由出口,清除导航url显示
      closePopup() 
        // Providing a `null` value to the named outlet
        // clears the contents of the named outlet
        this.router.navigate([ outlets:  popup: null  ]);
      
    

     

  • 视图显示

技术图片

 

以上是关于angular+ 路由学习 多路由出口学习的主要内容,如果未能解决你的问题,请参考以下文章

Angular JS 学习之路由

Angular 9 嵌套延迟加载模块,带有嵌套路由器出口

Angular 使用了错误的路由器插座

Angular 2如何将变量从父组件传递到路由器出口

Angular JS路由不起作用

华为防火墙静态路由结合多出口选路