如何使用StreamController在AngularDart中广播

时间:2018-07-12 04:52:21

标签: angular dart angular-dart angular-controller

我正在学习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>

0 个答案:

没有答案