在 Dart Angular2 中,如何根据活动组件更新站点 header 标题?
In Dart Angular2 how can I update site header title based on active component?
我正在构建一个 Angular2/Dart 应用程序,我想在其中根据活动组件更改页面 header 标题。
我找到了一个基于 rxjs 主题 的答案。我如何在不使用 rxjs Subject 作为 Observable 的情况下实现相同的目标,或者更具体地说,是否有任何其他方法可以直接在 angular2-dart 中执行此操作?
这里是working plunker,它基于rxjs Subject lib。
<h1>{{componentTitle}}<h1>
在 Dart 中你使用 Stream
和 StreamController
而不是 Observable
和 Subject
:
@Injectable()
export class RouteNames{
StreamController<String> _nameController = new StreamController<String>();
String get name => _nameController.stream;
void newName(String name) => _nameController.add(name);
}
那么您可以像这样订阅:
AppComponent(this._routeNames){
_routeNames.name.listen((n) => this.routeName = n);
}
更新可以像这样发送:
HeroListComponent(
this._service,
this._router,
this._routeParams,
this._routeNames:RouteNames){
this._selectedId = +routeParams.get('id');
_routeNames.newName('Heroes');
}
要支持多个订阅者,您需要将流设为广播流:
@Injectable()
export class RouteNames{
StreamController<String> _nameController = new StreamController<String>.broadcast();
public get name => _nameController.stream;
newName(String name) => _nameController.add(name);
}
我正在构建一个 Angular2/Dart 应用程序,我想在其中根据活动组件更改页面 header 标题。
我找到了一个基于 rxjs 主题
这里是working plunker,它基于rxjs Subject lib。
<h1>{{componentTitle}}<h1>
在 Dart 中你使用 Stream
和 StreamController
而不是 Observable
和 Subject
:
@Injectable()
export class RouteNames{
StreamController<String> _nameController = new StreamController<String>();
String get name => _nameController.stream;
void newName(String name) => _nameController.add(name);
}
那么您可以像这样订阅:
AppComponent(this._routeNames){
_routeNames.name.listen((n) => this.routeName = n);
}
更新可以像这样发送:
HeroListComponent(
this._service,
this._router,
this._routeParams,
this._routeNames:RouteNames){
this._selectedId = +routeParams.get('id');
_routeNames.newName('Heroes');
}
要支持多个订阅者,您需要将流设为广播流:
@Injectable()
export class RouteNames{
StreamController<String> _nameController = new StreamController<String>.broadcast();
public get name => _nameController.stream;
newName(String name) => _nameController.add(name);
}