实现ng2-router路由,嵌套路由

  1. 首先配置angular2的时候router模块已经下载,只需要引入即可

    import {RouterModule,Routes} from "@angular/router";
  2. 我们要创建一个嵌套路由,所以需要创建以下文件

    index.html
    app.module.ts
    app.component.ts
    home.component.ts
    list.component.ts
    list-one.component.ts
    list-two.component.ts
  3. 实现效果:
    路由,单机“首页”加载home.component.ts
    单机"列表“加载list.component.ts
    列表中包含嵌套路由,tab页
    单机"标签一"加载list-one.component.ts
    单机"标签二"加载list-one.component.ts

  4. 开始配置

    • index.html界面配置两点

      <head>标签中引入 <Meta href="/" />
         引入路由代码显示标签 引入主组件标签 <my-app></my-app>

      就这么简单, index.html界面配置完毕

    • app.module.ts界面配置路由

      import {browserModule} from "@angular/platform-browser";
         import {NgModule} from "@angular/core";
         import {RouterModule,Routes} from "@angular/router";
      
         // 表单 双向数据绑定
         import {FormsModule} from "@angular/forms";
         import {AppComponent} from "./app.component";
         // List中包含两个tab子组件
         import {ListComponent} from "./list.component";
         import {ListOneComponent} from "./list-one.component";
         import {ListTwoComponent} from "./list-two.component";
         import {HomeComponent} from "./home.component";
         // 定义路由,bootstrap默认加载组件就是AppComponent,所以他就是主页导航页,然后添加的路由都在他的模板中。
      
         // 可以所有代码写在NgModule中,也可以这样自定义常量,然后使用。
      
         // 定义常量 嵌套自路由
         const appChildRoutes: Routes = [
           {path: "one",component: ListOneComponent},{path: "two",component: ListTwoComponent},// 如果地址栏中输入没有定义的路由就跳转到one路由界面
           {
             path: '**',redirectTo: "one"
           }
         ];
         // 定义常量 路由
         const appRoutes:Routes = [
           {path: '',component: HomeComponent},{
             path: 'list',component: ListComponent,children: appChildRoutes
         ];
         // 引用定义的路由
         @NgModule({
           imports: [
             browserModule,FormsModule,RouterModule.forRoot(appRoutes)
           ],declarations: [
             AppComponent,ListComponent,HomeComponent,ListOneComponent,ListTwoComponent
           ],bootstrap: [AppComponent]
         })
         export class AppModule {
         
         }

      这样就完成了嵌套路由的配置

    • 显示路由内容

      • app.component.ts

      import {Component} from "@angular/core";
         @Component({
           selector: "my-app",// templateUrl: "../views/one.html"
           template: `
                     <div>
                     <!--使用了bootstrap样式的导航,routerLinkActive,表示路由激活的时候,谈价active类样式-->
                       <ul class="nav navbar-nav">
                         <li routerLinkActive="active"><a routerLink="home">首页</a></li>
                         <li routerLinkActive="active"><a routerLink="contact">联系我们</a></li>
                         <li routerLinkActive="active"><a routerLink="product">产品</a></li>
                       </ul>
                       <!--路由内容显示区域-->
                       <router-outlet></router-outlet>
                     </div>
                     `
         })
         export class AppComponent {
         
         }
      • list.component.ts

      import {Component} from "@angular/core";
         @Component({
             selector: "my-list",// templateUrl: "../views/list.html"
             template: `
                   <div>
                     <!-- 子路由连接 -->
                     <a routerLink="one">one</a>
                     <a routerLink="two">two</a>
                     <!-- 路由内容显示标签 -->
                     <router-outlet></router-outlet>
                   </div>
                `
         })
         export class ListComponent {
             name = "list";
         }
      • list-one.component.ts

      import {Component} from "@angular/core"
         @Component({
              selector: "my-list-one",template:`
                 {{name}}
              `
         })
         export class ListOneComponent {
              name = "list-one";
             }
      • list-two.component.ts同理

      获取路由参数id  (about:id) 添加模块 ActivatedRoute
      import {ActivatedRoute} from "@angular/router";
         
         export class AboutList {
             id: Object;
             constructor(public route:ActivatedRoute) {
                 this.id = {};
             }
             ngOnInit() {
                 this.route.params.subscribe(params => {
                     this.id = params  // {id: "xxx"}
                 });
             }
         }
         ----------------------
         路由:
         {
             path: 'contacts-detail/:id',component: ContactsDetailComponent
         },跳转
         界面跳转:
         {{row.instid}}
         <a (click)="contactsCheck(row)"><i class="fa fa-delete"></i>审核</a>
         <a class="fa fa-editor" [routerLink]="['../contacts-detail/'+ row.instid]">查看详情</a>
         方法跳转:
         contactsCheck(value: any) {
         console.log(value);
         this.router.navigate(['./contacts/contacts-detail',value.instid]);
      }
         ----------------------
         
         直接获取id值
         this.route.snapshot.params["id"]
      补助: 路由中的界面跳转
      import {Router} from "@angular/router";
          
          constructor(public router: Router) {
          // 相当于window.location.href,界面跳转
              router.navigateByUrl('home');
          }

angular2 ng2-router 路由,嵌套路由详解的更多相关文章

  1. 关闭iOS原生MPVolumeView音频路由菜单

    我正在使用MPVolumeView允许用户在使用我的应用程序时控制他喜欢的音频路径.该代码显示了该视图:当用户点击音频路由按钮时,会出现一个带有可用选项的菜单.问题:显示音量视图的屏幕可能需要隐藏,因为我的应用程序处理各种事件,我想同时隐藏音频路由菜单我的问题:有没有人知道是否可以手动关闭MPVolumeView的音频路由选择菜单而无需用户按下取消按钮?解决方法在iOS8上,您可以使用以下使用私有API的代码

  2. ios – Xcode只看到一些嵌套类的类似扩展,这些扩展是用不同的文件编写的

    解决方法我遇到过类似的问题,似乎编译器正在尝试处理扩展嵌套类的文件,在嵌套类定义之前.因此,您有此错误说该Space没有成员SomeClass.我发现的解决方案是转到目标设置,打开BuildPhases.在“编译源”部分中,您应该将用于定义嵌套类的文件放在扩展它的文件上.这个解决方案似乎甚至可以很好地与您的观察结果一致,当您重新创建文件时,它有时会编译,因为当您重新创建文件时,它在编译源中的位置会发生变化.

  3. ios – 嵌套递归函数

    我试图做一个嵌套递归函数,但是当我编译时,编译器崩溃.这是我的代码:编译器记录arehere解决方法有趣的…它似乎也许在尝试在定义之前捕获到内部的引用时,它是bailing?以下修复它为我们:当然没有嵌套,我们根本没有任何问题,例如以下工作完全如预期:我会说:报告!

  4. ios – 在swift中将捕获列表正确放置在嵌套闭包中

    在Swift中为哪些嵌套闭包定义捕获的引用?如果[weakself]被捕获在只有内部最后面的闭包,GCD将保留ExampleDataSource,直到块完成执行,这就解释了为什么调试看起来像这样:同样的事情会发生,如果没有捕获列表被包括,我们从来没有可选地解开自己,尽管编译器,确实试图警告你!

  5. ios – 无效的软件包 – 嵌套软件包没有在CFBundleSupportedPlatforms Info.plist键中列出的正确平台

    我上传了一个应用程序到iOSAppStoretestflight.iOSAppStore收到以下电子邮件:InvalidBundle–Anestedbundledoesn’thavetherightplatformslistedinCFBundleSupportedplatformsInfo.plistkey.Oncetheseissueshavebeencorrected,youcanthenr

  6. ios – 如何在使用嵌套上下文时自动设置Core Data关系

    解决方法想到的第一个想法是,虽然姓名的人际关系是不可选的,但你并没有说Person的姓名关系也是不可选的.创建一个没有名字的人,可以用您的代码处理,然后在实际需要时创建名称吗?当然不用打扰自定义awakeFromInsert…

  7. iOS:使用蓝牙音频输出(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput)AudioSession

    >如果有可用的A2DP设备,我的音频路由将始终自动切换到kAudioSessionOutputRoute_BluetoothA2DP路由.如何防止此路线更改?我希望你们中的一些人可以帮助我解决这些问题.这对我对CoreAudio的整体理解,特别是AudioSession框架,真的有帮助.解决方法AudioSession是一项棘手的业务.1.BluetoothHFPaudiooutputisonlypossibleincaseofAudioSessionkAudioSessionCategory_PlayA

  8. cocoa-touch – Interface Builder:如何选择嵌套元素?

    在界面构建器中是否有一种方法可以看到我的元素树,以便我可以选择它们.在实际视图中选择内容非常困难,特别是当我有很多元素和嵌套视图等时.谢谢解决方法尝试按住shift并右键单击元素.它应该显示该元素下的视图层次结构的菜单.实际上,等一下,在层次结构中显示出这个元素之上的元素.你想要做的是使用Nib窗口,选择’Window’然后设置它的列视图,这样你就可以更轻松地导航.

  9. 寒城攻略:Listo 教你 25 天学会 Swift 语言 - 21 Nested Types

    //***********************************************************************************************//1.nestedTypes(类型嵌套)//________________________________________________________________________________

  10. Swift基础语法: 22 - Swift的函数类型, 嵌套函数

    前面我们讲解了函数里面的形参,现在让我们继续来看看函数的类型,以及嵌套函数,让我们一起来看看:1.使用函数类型在Swift中的函数声明和在OC中没什么区别,只有语法上的差异,但在Swift中有一项比较有趣的就是,声明变量或者常量的时候也是可以指定返回值的,比如:当然,常量也是可以如此的,这里就不多做解释了,想知道的朋友可以自己回去试试.2.作为形参类型的函数类型还有更好玩的就是,我们可以在声明新的

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部