我正在学习StreamController。一共有三个组件:ComponentA,ComponentB,ComponentC。我要实现的是:如果用户单击任意一个组件,则funcA()
,funcB()
,funcC()
就是一个组件。
我的以下设计有问题吗?谢谢
ComponentA {
ClickService _service;
ComponentA(this._service) {
_service.clickStream.stream.listen(funcA);
}
void funcA {
// do something
}
// click event handler
void onClick(Event data) {
_service.fireEvent(data);
}
}
ComponentB {
ClickService _service;
ComponentB(this._service) {
_service.clickStream.stream.listen(funcB);
}
void funcB {
// do something
}
// click event handler
void onClick(Event data) {
_service.fireEvent(data);
}
}
ComponentC {
ClickService _service;
ComponentC(this._service) {
_service.clickStream.stream.listen(funcC);
}
void funcC {
// do something
}
// click event handler
void onClick(Event data) {
_service.fireEvent(data);
}
}
@Injectable()
class ClickService {
final clickStream = new StreamController<Event>.broadcast();
void fireEvent(Event data) {
clickStream.add(data);
}
}
ComponentA的模板
<button (click)="onClick($event)">Click A!</button>
ComponentB的模板
<button (click)="onClick($event)">Click B!</button>
ComponentC的模板
<button (click)="onClick($event)">Click C!</button>