网站建设交易平台/灰色词首页排名接单
官网学习angular2笔记
怎么说呢,之前一直不想学angular2,因为之前学了ag1,听同事说2改变挺大的要完全重学,再加上之前学了vue感觉确实很好用,就没打算学ag2但是现在要自己重构项目,也就厚着脸皮学了。这应该是学习的第四天。开始跟着英雄教程走,越接触越觉得和vue还是有很多共同点的
言归正传:这里主要记录路由
1、引入路由之前要确定在index.html里面有设置根路径
<base href="/">
2、在根模块中引入router模块
import { RouterModule, Routes } from '@angular/router';
3、配置
const appRoutes: Routes = [ //:id是一个路由参数的令牌(Token) { path: 'crisis-center', component: CrisisListComponent }, { path: 'hero/:id', component: HeroDetailComponent }, { path: 'heroes', component: HeroListComponent, data: { title: 'Heroes List' } //data属性用来存放于每个具体路由有关的任意信息。该数据可以被任何一个激活路由访问,并能用来保存诸如 页标题、面包屑以及其它静态只读数据 }, { path: '',//空的一般指代默认路径 redirectTo: '/heroes', pathMatch: 'full' }, { path: '**', component: PageNotFoundComponent } //**路径是一个通配符 一般用做404的输出 ]; @NgModule({ imports: [ RouterModule.forRoot(appRoutes) // other imports here 这里对应上面的常量 ], ... }) export class AppModule { }
路由器使用先匹配者优先的策略来选择路由。 通配符路由是路由配置中最没有特定性的那个,因此务必确保它是配置中的最后一个路由。
{ path:'post', loadChildren:'./post/post.module#PostModule' }
4、路由出口
<router-outlet></router-outlet>
这里就和vue的routerview是一样的表示显示定义了routerLink的模块或者其他
template: `<h1>Angular Router</h1><nav><a routerLink="/crisis-center" routerLinkActive="active">Crisis Center</a><a routerLink="/heroes" routerLinkActive="active">Heroes</a></nav><router-outlet></router-outlet>
`
onSelect(hero: Hero) {this.router.navigate(['/hero', hero.id]);}
它用一个链接参数数组调用路由器的navigate
方法。 如果我们想把它用在HTML中,那么也可以把相同的语法用在RouterLink
中。
ActivatedRoute:一站式获取路由信息
该路由的路径和参数可以通过注入进来的一个名叫ActivatedRoute的路由服务来获取。 它有一大堆有用的信息,包括:
url
: 该路由路径的Observable
对象。它的值是一个由路径中各个部件组成的字符串数组。
data
: 该路由提供的data
对象的一个Observable
对象。还包含从resolve守卫中解析出来的值。
params
: 包含该路由的必选参数和可选参数的Observable
对象。
queryParams
: 一个包含对所有路由都有效的查询参数的Observable
对象。
fragment
: 一个包含对所有路由都有效的片段值的Observable
对象。
outlet
: RouterOutlet
的名字,用于指示渲染该路由的位置。对于未命名的RouterOutlet
,这个名字是primary。
routeConfig
: 与该路由的原始路径对应的配置信息。
parent
: 当使用子路由时,它是一个包含父路由信息的ActivatedRoute
对象。
firstChild
: 包含子路由列表中的第一个ActivatedRoute
对象。
children
: 包含当前路由下激活的全部子路由。
import { Router, ActivatedRoute, Params } from '@angular/router';
这里导入switchMap
操作符是因为我们稍后将会处理路由参数的可观察对象Observable
。
src/app/heroes/hero-detail.component.ts (switchMap operator import)
import 'rxjs/add/operator/switchMap';
通常,我们会直接写一个构造函数,让Angular把组件所需的服务注入进来,自动定义同名的私有变量,并把它们存进去。
src/app/heroes/hero-detail.component.ts (constructor)
constructor(private route: ActivatedRoute,private router: Router,private service: HeroService
) {}
模块懒加载
项目结构
一般是在routing.module中定义对应的路径和组件然后再在@ngModule的import中导入这个路径数组常量或者在module中的@ngModule中引入routing.module export 的路径数组常量
eg:1 如上面的方法一样
eg2:
当然在上面的时候还要在最初引入这些模块才能直接使用 根路由用forRoot,子路由用forChild,这样在routing.module中就只用export 常量数组就可以了
模块懒加载分析
1、在根routing.module中设置懒加载模块
2、建立模块
3、设置routing.module,就是上面的user-route.ts
import { RouterModule } from '@angular/router'; import {Usermian} from './usermian/usermian'; import {UserinfoComponent} from './userinfo/userinfo'; import {Userother} from './userother/userother'; export const userroutes=[ { path:'', component:Usermian,//表示默认输出该模块,后面的为整个的其他的页面 children:[ { path:'', redirectTo:'user', pathMatch:'full' }, { path:'userinfo', component:UserinfoComponent }, { path:'userother', component:Userother } ] } ]
4、设置user.module.ts
import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; 引入路由模块 import { Usermian } from './usermian/usermian'; import { UserinfoComponent } from './userinfo/userinfo'; import { Userother } from './userother/userother'; import {userroutes} from "./user-route"; //模块有自己的routes在module中用forChild 引入一下 @NgModule({ declarations:[ Usermian, 这里导入用组件访问设置path的组件名,用link链接的就不用了 UserinfoComponent, Userother ], imports: [ RouterModule.forChild(userroutes) 引入自己设置的userroutes模块 ],exports: [ Usermian ] }) export class UserModule { }
5、补充
由于设置的主要路径是在usermian里面所以在里面设置routerLink和显示 usermian.ts如下
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-usermin', template:`<div> <a routerLink="userinfo">用户信息</a> <a routerLink="userother">其他</a> </div> <div> <router-outlet></router-outlet> </div> ` }) export class Usermian implements OnInit { constructor() { } ngOnInit() { } }
6、最终效果
对于路由还有很多没学到,后面会逐步的完善,这只是对于初使用和懒加载在使用的记录,知道有很多不足,书面也不怎么好看,还望各位看官多多包涵哈
相对导航
首先我们需要知道相对于什么位置进行导航,所以先要有个参照路径。参照路径可以从ActivatedRoute中获取。
- 1
- 1
这里就是相对于当前route(this.route)进行导航,导航至/child-center。
如果当前url是xxx:8080,那么导航后的结果:
xxx:8080/child-center
也可以导航至上一层
- 1
- 1
3.绝对导航
接口说明
Routes
是路由配置数组。每个都有以下属性:
path
是使用路由匹配器DSL的字符串。pathMatch
是指定匹配策略的字符串。matcher
定义了路径匹配并取代自定义策略path
和pathMatch
。有关详细信息,请参阅UrlMatcher。component
是组件类型。redirectTo
是将替换当前匹配段的url片段。outlet
是组件应放入的插座的名称。canActivate
是用于查找CanActivate处理程序的DI令牌数组。查看CanActivate
更多信息。canActivateChild
是用于查找CanActivateChild处理程序的DI令牌数组。查看CanActivateChild
更多信息。canDeactivate
是用于查找CanDeactivate处理程序的DI令牌数组。查看CanDeactivate
更多信息。canLoad
是用于查找CanDeactivate处理程序的DI令牌数组。查看CanLoad
更多信息。data
是提供给组件via的附加数据ActivatedRoute
。resolve
是用于查找数据解析器的DI令牌的映射。查看Resolve
更多信息。children
是子路由定义的数组。loadChildren
是对延迟加载子路由的引用。查看LoadChildren
更多信息。