angularjs路由,angular动态路由

  angularjs路由,angular动态路由

  什么是路由?本篇文章带大家深入了解一下有角的中的路由,希望对大家有所帮助!

  路由简介

  路由是实现单页面应用的一种方式,通过监听混杂或者历史的变化,渲染不同的组件,起到局部更新的作用,避免每次统一资源定位器变化都向服务器请求数据。【相关教程推荐: 《angular教程》 】

  路由配置

  配置路由模块:approuter.module.ts

  const routes: Routes=[

  { path: first ,component: FirstComponent },

  {路径:"父",组件:第二组件}

  ]

  @NgModule({

  进口:[

  公共模块

  //RouterModule.forRoot方法会返回一个模块,其中包含配置好的路由器服务

  //提供者,以及路由库所需的其它提供者。

  RouterModule.forRoot(routes,{

  //enableTracing: true,//-仅用于调试目的

  //配置所有的模块预加载,也就是懒加载的模块,在系统空闲时,把懒加载模块加载进来

  //PreloadAllModules策略不会加载被罐头装载守卫所保护的特性区。

  预加载策略:预加载所有模块

  })

  ],

  出口:[

  第一个组件,

  第二个组件,

  路由器模块

  ],

  声明:[

  第一个组件,

  第二成分

  ]

  })

  导出类ApprouterModule { }app.module.ts中引入改模块:

  进口:[ ApprouterModule ]重定向路由:

  const routes: Routes=[

  {路径: ,重定向到: 第一个,路径匹配:完整 }

  ]通配符路由:

  const routes: Routes=[

  //路由器会使用先到先得的策略来选择路由。由于通配符路由是最不具体的那个,因此务必确保它是路由配置中的最后一个路由。

  {路径:"**",组件:NotFoundComponent }

  ]路由懒加载:

  配置懒加载模块可以使得首屏渲染速度更快,只有点击懒加载路由的时候,对应的模块才会更改。

  const routes: Routes=[

  {

  路径:"加载",

  loadChildren: ()=import(./load/load。模块”).然后(m=m.ListModule),

  //CanLoadModule如果返回假的,模块里面的子路由都没有办法访问

  canLoad: [CanLoadModule]

  },

  ]懒加载模块路由配置:

  从" @角度/核心"导入{ ng模块};

  从" @angular/common "导入{公共模块};

  从""导入{加载组件} ./load。组件;

  从" @angular/router "导入{ RouterModule,Routes }。

  从导入{ LoadTwoComponent }./././app/components/加载两个/加载两个。组件;

  从导入{ LoadOneComponent }./././app/components/load one/load one。组件;

  const routes: Routes=[

  {

  路径: ,

  组件:负载组件

  儿童:[

  { path: LoadOne ,component: LoadOneComponent },

  {路径:加载二,组件:LoadTwoComponent }

  ]

  },

  ]

  @NgModule({

  进口:[

  公共模块

  //子模块使用对孩子来说配置

  RouterModule.forChild(routes)

  ],

  声明:[

  负载组件,

  LoadOneComponent,

  LoadTwoComponent

  ]

  })

  导出加载模块类{ }懒加载模块路由导航:

  a[路由器链接]=[ load one ] load one/a

  a[路由器链接]=[ load two ] load two/a

  路由器出口/路由器出口路由参数传递:

  const routes: Routes=[

  { path: second/:id ,组件:第二组件},

  ]//routerLinkActive配置路由激活时的类

  a[路由器链接]=[/秒,12]路由器链接活动=活动秒/a获取路由传递的参数:

  从" @angular/router "导入{ ActivatedRoute,ParamMap,Router }。

  从" @角度/核心"导入{组件,在init }上。

  从" rxjs/运算符"导入{切换地图};

  @组件({

  选择器:"应用程序-秒",

  templateUrl:“”./second.component.html ,

  样式URL:[ ./second.component.scss]

  })

  导出类第二成分实现OnInit {

  构造器(私有activatedRoute: ActivatedRoute,私有路由器:路由器){ }

  ngOnInit() {

  控制台。日志(这个。激活路线。快照。params);//{id: 12}

  //控制台。日志(这个。激活的路线);

  //这种形式可以捕获到全球资源定位器(统一资源定位器)输入/秒/18然后点击a [routerLink]=[ /second ,12 ]second/a

  //是可以捕获到的。上面那种是捕获不到的。因为不会触发恩戈尼特,公用了一个组件实例。

  这个。激活路线。参数映射。管道(

  开关映射((params: ParamMap)={

  控制台。日志(参数。get( id );

  返回”参数”;

  })).订阅(()={

  })

  }

  gotoFirst() {

  这个。路由器。导航([/first ]);

  }

  }queryParams参数传值,参数获取也是通过激活的路由的依赖注入

  !-查询参数参数传值-

  a[路由器链接]=[/first ][查询参数]= { name: first } first/a

  !- ts中传值-

  !-这个。路由器。navigate([/first ],{ query params:{ name: first });-路由守卫:canActivate,canDeactivate,resolve,canLoad

  路由守卫会返回一个值,如果返回真实的继续执行,假的阻止该行为,UrlTree导航到新的路由。

  路由守卫可能会导航到其他的路由,这时候应该返回错误。路由守卫可能会根据服务器的值来

  决定是否进行导航,所以还可以返回承诺或可观察的,路由会等待

  返回的值是真实的还是错误。

  可以激活导航到某路由。

  被激活的儿童导航到某子路由。

  const routes: Routes=[

  {

  路径:"父级",

  组件:ParentComponent,

  canActivate: [AuthGuard],

  儿童:[

  //无组件子路由

  {

  路径: ,

  canActivateChild:[AuthGuardChild],

  儿童:[

  { path: childOne ,component: ChildOneComponent },

  { path: childTwo ,component: ChildTwoComponent }

  ]

  }

  ],

  //有组件子路由

  //孩子:[

  //{ path: childOne ,component: ChildOneComponent },

  //{ path: childTwo ,component: ChildTwoComponent }

  //]

  }

  ]从@角度/核心导入{内射};

  从" @angular/router "导入{ CanActivate,ActivatedRouteSnapshot,RouterStateSnapshot }。

  @可注射({

  提供了:"根",

  })

  导出类AuthGuard实现可以激活

  能激活(

  接下来:ActivatedRouteSnapshot,

  状态:路由状态快照):任何{

  //返回真实的

  //返回承诺的情况

  返回新承诺((解决,拒绝)={

  setTimeout(()={

  解决(真);

  }, 3000);

  })

  }

  }从" @角度/核心"导入{内射};

  导入{

  ActivatedRouteSnapshot,

  路由器状态快照,

  被激活的儿童

  }来自@ angular/router ;

  @可注射({

  提供了:"根",

  })

  导出类AuthGuardChild实现CanActivateChild {

  构造函数(){}

  canActivateChild(

  路由:ActivatedRouteSnapshot,

  state:RouterStateSnapshot):boolean {

  返回真实的

  }

  }parent.component.html路由导航:

  !-使用相对路径-

  一个[routerLink]=[ ./childOne ]一个/a

  !-使用绝对路径-

  a[路由器链接]=[/父/子两个]两个/a

  路由器出口/路由器出口可以停用路由离开,提示用户没有保存信息的情况。

  const routes: Routes=[

  { path: first ,component: FirstComponent,cande activate:[cande activate guard]}

  ]从导入{第一组件} ./组件/第一个/第一个。组件;

  从" @angular/router "导入{ routerstatsnapshot };

  从" @angular/router "导入{ activatedroutensnapshot };

  从" @角度/核心"导入{内射};

  从" @angular/router "导入{可以激活};

  @可注射({

  提供了:"根",

  })

  导出类CanDeactivateGuard实现CanDeactivateany {

  canDeactivate(

  组件:任何,

  路由:ActivatedRouteSnapshot,

  状态:路由器状态快照

  ):boolean {

  //组件获取到组件实例

  控制台。日志(组件。islogin);

  返回真实的

  }

  }canLoad是否能进入懒加载模块:

  const routes: Routes=[

  {

  路径:"加载",

  loadChildren: ()=import(./load/load。模块”).然后(m=m.LoadModule),

  //CanLoadModule如果返回假的,模块里面的子路由都没有办法访问

  canLoad: [CanLoadModule]

  }

  ]从@angular/compiler/src/core 导入{ Route };

  从" @角度/核心"导入{内射};

  从" @angular/router "导入{可以加载};

  @可注射({

  提供了:"根",

  })

  导出类CanLoadModule实现可以装载{

  canLoad(route: Route): boolean {

  返回真实的

  }

  }解决配置多久后可以进入路由,可以在进入路由前获取数据,避免白屏

  const routes: Routes=[

  { path: resolve ,component: ResolveDemoComponent,resolve:{ detail:detail resolver }

  ]从@角度/核心导入{内射};

  从" @angular/router "导入{ Resolve,ActivatedRouteSnapshot,RouterStateSnapshot }。

  @ injectable({在: root })中提供)

  导出类详细解析器实现Resolveany {

  构造函数(){ }

  resolve(route:ActivatedRouteSnapshot,state:RouterStateSnapshot):any {

  返回新承诺((解决,拒绝)={

  setTimeout(()={

  解决(“解析数据");

  }, 3000);

  })

  }

  }已解决的组件获取分解的值

  构造函数(私有路由:ActivatedRoute) { }

  ngOnInit() {

  const detail=this.route快照。数据。细节;

  console.log(详细);

  }监听路由事件:

  构造器(私有路由器:路由器){

  这个。路由器。事件。订阅((事件)={

  //NavigationEnd,NavigationCancel,NavigationError,RoutesRecognized

  导航开始的事件实例){

  控制台。日志(“导航开始”);

  }

  })

  }更多编程相关知识,请访问:编程视频!以上就是深入了解有角的中的路由的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: