如何在Dart中创建单例组件,并在需要时将处理程序传递给所有其他组件?

问题描述 投票:0回答:1

我正在尝试为该应用创建中央通知服务,以通过相同的“管道”报告简单错误。这可能是错误的方法,但是我需要在主HTML material-popup上附加一个body,并根据各个组件的要求按需显示。

import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
import 'package:angular_components/laminate/overlay/zindexer.dart';


@Component(
    selector: 'hv-alerts',
    templateUrl: 'alert_service.html',
    directives: [
      MaterialPopupComponent,
      PopupSourceDirective
    ],
    providers: [
      ClassProvider(ZIndexer),
      materialProviders,
      popupBindings
    ]
)

class AlertService {

  RelativePosition get popupPosition => RelativePosition.AdjacentTop;

  bool popupVisible = false;

  void setVisible(bool flag) {
    popupVisible = flag;
  }


  PopupSizeProvider popupSize = FixedPopupSizeProvider(
      minWidth: 400,
      minHeight: 75,
      maxWidth: 600,
      maxHeight: 75
  );


  static final AlertService _instance = AlertService();
}

是否可以通过单例或material-popup或其他方式将处理程序传递给此Factory,并允许其他服务调用AlertService.show()

dart angular-dart dart-html
1个回答
0
投票

组件的生命周期取决于模板本身中的元素。这样,如果您有两个具有相同选择器的元素,则将有两个组件。您不能单靠自己来拥有它们。

那就是我将如何实现的,它是其中的服务部分的抽象,并且具有一个单独的类,该类将被注入到弹出组件和任何用法中。弹出窗口将侦听流,知道何时显示弹出窗口,客户端将在StreamController上发送事件以告诉弹出窗口何时显示。如果您想更安全一些,可以提供两个不同的接口,由相同实体支持的流和流控制器。这将使您更快地查看谁正在使用警报以及谁在生成警报。

© www.soinside.com 2019 - 2024. All rights reserved.