本帖最后由 悟箜 于 2016-7-30 15:28 编辑
既然Angular是单页应用的框架,那么路由(router)自然就是非常重要的一环,路由控制着整个单页application的内容切换。
SO~~我们今天就来简单的看一下Angular2中的路由是怎么使用的~(请注意目前Angular2的router模块还处于beta版本,但是并不影响我们今天的展示,哈哈~)
按照惯例我们先来看看跟上次的演示相比([Angular2]创建简单的Angular2 Components)我们项目的目录变动情况:
- 我们主要添加了router 文件夹(存放route配置信息),Navbar component(导航栏组件), 引入‘@angular/router’模块,再有就是Home跟About两个component了,就只有这些~
屏幕快照 2016-07-30 下午2.41.45.png
(199.41 KB, 下载次数: 0)
屏幕快照 2016-07-30 下午2.44.03.png
(116.44 KB, 下载次数: 0)
package.json主要引入‘@angular/router’模块,还有就是start server加了入口文件(为什么呢??动手试试看看你能不能发现这里的问题)- {
- "name": "angular2-quick-start",
- "version": "0.0.1",
- "description": "This is one sample for Angular2 quick start",
- "scripts": {
- "test": "echo "Error: no test specified" && exit 1",
- "start": "live-server --port=22222 --entry-file=index.html"
- },
- "author": "Wu Kong",
- "dependencies": {
- "@angular/common": "2.0.0-rc.4",
- "@angular/compiler": "2.0.0-rc.4",
- "@angular/core": "2.0.0-rc.4",
- "@angular/platform-browser": "2.0.0-rc.4",
- "@angular/platform-browser-dynamic": "2.0.0-rc.4",
- "@angular/router": "3.0.0-beta.2",
-
- "reflect-metadata": "^0.1.3",
- "rxjs": "5.0.0-beta.6",
- "systemjs": "^0.19.31",
- "zone.js": "^0.6.12",
- "es6-shim": "0.35.1"
- },
- "devDependencies": {
- "live-server": "^0.8.2",
- "typescript": "^1.8.10"
- }
- }
复制代码 systemjs.config.js我们需要为新引入的模块添加识别路径,要不然systemJS不知道去哪加载哦~- System.config({
- transpiler: 'typescript', /** 编译typescript*/
- typescriptOptions: {
- emitDecoratorMetadata: true
- },
- map: {
- 'app': 'app', /** 指定代码所在路径*/
- 'rxjs': 'node_modules/rxjs',
- '@angular': 'node_modules/@angular'/** 指定Angular2所在路径*/
- },
- packages: {/** 指定入口文件!!*/
- 'app': {
- main: 'main.ts',
- defaultExtension: 'ts'
- },
- 'rxjs': {
- main: 'index.js'
- },
- '@angular/core': {
- main: 'index.js'
- },
- '@angular/common': {
- main: 'index.js'
- },
- '@angular/compiler': {
- main: 'index.js'
- },
- '@angular/platform-browser': {
- main: 'index.js'
- },
- '@angular/platform-browser-dynamic': {
- main: 'index.js'
- },
- '@angular/router': {
- main: 'index.js'
- }
- }
- });
复制代码- 最最最重要的当然就是创建route的配置信息了,我们这里建了router文件夹存放配置信息,直接上代码:
app.routes.ts, 创建RouteConfig的const,然后provide出去- export const routes: RouterConfig = [
- { path: '', component: HomeComponent },
- { path: 'about', component: AboutComponent }
- ];
- export const APP_ROUTER_PROVIDERS = [
- provideRouter(routes)
- ];
复制代码 然后我们需要把上面provide出来的配置信息注入到启动文件里,也就是main.ts- bootstrap(AppComponent, [
- APP_ROUTER_PROVIDERS
- ]).catch(err => console.error(err));
复制代码 OK~就这样我们就给我们的Angular2 application配置好了路由信息啦~~~
- 最后我们只需要添加导航栏到我们的主页面上,也就是我们的Navbar Component。并且我们需要高速主页面当我们点击导航栏链接的时候应该显示哪一个component
首先我们新建一个Navbarcomponent,跟之前不一样的是我们需要引入router 的指令来识别我们的导航链接(routerLink)- @Component({
- moduleId: 'app/common/components/navbar/',
- selector: 'wk-navbar',
- templateUrl: 'navbar.html',
- styleUrls: ['navbar.css'],
- directives: [ROUTER_DIRECTIVES]
- })
- export class NavbarComponent {}
复制代码 template:添加两个link- <div class="navbar">
- <ul>
- <li><a [routerLink]="['']" [routerLinkActiveOptions]="{exact: true}" routerLinkActive="active">Home</a></li>
- <li><a [routerLink]="['about']" routerLinkActive="active">About</a></li>
- </ul>
- </div>
复制代码 导航栏工作完成,接下来我们就需要告诉我们的app.component该把我们的内容加载到哪里了:
上一次我们已经提到过<main>里是放我们的内容的,那我们其实只需要把<router-outlet>这个router指令加到我们的main标签里就可以了。这样,当你点击不同的link的时候router-outlet标签就会切换相应不同的component啦~~同样我们也是需要引入router的指令到我们的app.component里面。- @Component({
- selector: 'wk-app',
- template: `<wk-header></wk-header>
- <main>
- <router-outlet></router-outlet>
- </main>
- <wk-footer></wk-footer>`,
- styles: [`
- main {
- height: 400px;
- text-align: center;
- }
- `],
- directives: [ROUTER_DIRECTIVES,HeaderComponent, FooterComponent]
- })
- export default class AppComponent { }
复制代码 通过上面这几步是不是瞬间觉得单页应用的路由其实挺简单的~~哈哈~
最后按照惯例我们,附上我们的战利品:
屏幕快照 2016-07-30 下午3.19.28.png
(89.17 KB, 下载次数: 1)
|