我有以下代码
import 'dart:async';
import 'dart:html';
import 'package:angular/angular.dart';
@Component(
selector: 'my-screen',
directives: [coreDirectives, ],
templateUrl: 'my_component.html',
)
class MyComponent implements OnInit, OnDestroy {
Stream periodicStream;
StreamSubscription periodicSubs;
MyBloc myBloc;
myComponent(this.myBloc) : super() {
myBloc.listen((newState){
if (newState is SomeBlocState) {
periodicStream = new Stream.periodic(new Duration(seconds: 1));
periodicSubs = periodicStream.listen(this.onTick);
}
});
}
void onTick(dynamic) {
print('onTick');
}
@override
void ngOnInit() {
}
@override
void ngOnDestroy() {
print('ngOnDestroy');
if (periodicSubs != null) {
print('periodicSubs.cancel()');
periodicSubs.cancel();
periodicSubs = null;
periodicStream = null;
}
}
}
主要问题是:
1)首次创建组件时,一切似乎都正常,我收到了控制台“ onTick”消息,并且在销毁组件(调用ngOnDestroy)后,该消息也消失了
2),但是当第二次创建组件(依此类推)并再次初始化定期流时,我最终得到了两次“ onTick”控制台日志消息,这似乎是先前的流仍然有效]
什么会引起这种行为?
我有以下代码导入'dart:async';导入'dart:html';导入'package:angular / angular.dart'; @Component(选择器:“我的屏幕”,指令:[coreDirectives,],templateUrl:“ ...”>
问题在BLoC监听回调调用中。当组件尝试监听BLoC秒时间时,将立即调用回调以报告当前状态。