Dan*_*Dan 5 angularjs angular2-template angular2-routing angular
我正在通过关于路由的Angular 2文档.我有一个示例应用程序,它显示了两个组件,这些组件被路由并连接到导航链接. 这是一个展示行为的Plunker.它是在Typescript中使用Angular 2构建的.
这是主要的'app.component.ts'代码:
import {Component} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router';
import {CrisisCenterComponent} from './crisis-center/crisis-center.component';
import {HeroListComponent} from './heroes/hero-list.component';
import {HeroDetailComponent} from './heroes/hero-detail.component';
import {DialogService} from './dialog.service';
import {HeroService} from './heroes/hero.service';
@Component({
selector: 'my-app',
template: `
<h1 class="title">Component Router</h1>
<nav>
<a [routerLink]="['CrisisCenter']">Crisis Center</a>
<a [routerLink]="['Heroes']">Heroes</a>
</nav>
<router-outlet></router-outlet>
`,
providers: [DialogService, HeroService],
directives: [ROUTER_DIRECTIVES]
})
@RouteConfig([
{ // Crisis Center child route
path: '/crisis-center/...',
name: 'CrisisCenter',
component: CrisisCenterComponent,
useAsDefault: true
},
{path: '/heroes', name: 'Heroes', component: HeroListComponent},
{path: '/hero/:id', name: 'HeroDetail', component: HeroDetailComponent},
{path: '/disaster', name: 'Asteroid', redirectTo: ['CrisisCenter', 'CrisisDetail', {id:3}]}
])
export class AppComponent { }
Run Code Online (Sandbox Code Playgroud)
我要做的是将main(<h1>
)标题'Component Router'替换为正在呈现的'view'的名称.所以当你点击"危机中心"时,标题应该是"危机中心"; 当你点击"英雄"时,标题应该是"英雄".
我不想将标题移动到子组件模板中 - 我希望将其保留在HTML页面的顶部,最好只保留在一个模板中.
任何人都可以建议最好的(大多数Angular-docs)方式来实现这一目标吗?
非常感谢.
Abd*_*yer 12
我是这样做的:
- 首先,创建一个服务,负责在组件之间共享路由名称.并创建一个新的主题 "主题同时作为一个观察者和观察者"
import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Rx';
@Injectable()
export class RouteNames{
public name = new Subject();
}
Run Code Online (Sandbox Code Playgroud)
- 其次,通过在引导程序上注入来提供应用程序级别的服务:
import {RouteNames} from './route-names.service';
bootstrap(AppComponent, [ROUTER_PROVIDERS,RouteNames]);
Run Code Online (Sandbox Code Playgroud)
现在,您需要做的就是将您的服务注入app.component和每个将更改路由名称的组件.
app.component:订阅RouteNames.name主题并在下一步更新变量routeName.
import {RouteNames} from './route-names.service';
@Component({
selector: 'my-app',
template: `
<h1 class="title">{{routeName}}</h1>
<nav>
<a [routerLink]="['CrisisCenter']">Crisis Center</a>
<a [routerLink]="['Heroes']">Heroes</a>
</nav>
<router-outlet></router-outlet>
`,
...
})
@RouteConfig([
...
])
export class AppComponent {
routeName = "Component Router";
constructor(private _routeNames:RouteNames){
this._routeNames.name.subscribe(n => this.routeName = n);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在CrisisCenter上,注入RouteNames服务并在RouteNames.name上调用next:
从'../route-names.service'导入{RouteNames};
@Component({
...
})
@RouteConfig([
...
])
export class CrisisCenterComponent {
constructor(private _routeNames:RouteNames){
_routeNames.name.next('Crisis Center');
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样,这里有工作人员
归档时间: |
|
查看次数: |
4871 次 |
最近记录: |