【问题标题】:Run function / service before page / computer shuts down在页面/计算机关闭之前运行功能/服务
【发布时间】:2019-12-28 14:56:47
【问题描述】:

我创建了一个服务来计算时间,当我点击开始时间开始并且只停止直到它被点击暂停按钮。

如果有开始时间有什么办法可以关闭页面或者关闭电脑执行pauseTimer()函数?

谁能帮帮我?尝试使用hostlistener但没有效果:(

html

<dx-data-grid class="tabelaTask"
    [dataSource]="data"  
    height="600"
    showBorders="true">
      <dxo-paging [pageSize]="3"></dxo-paging>
    <dxo-scrolling mode="single"></dxo-scrolling>
    <dxi-column [width]="100" dataField="Name" caption="Customer"></dxi-column>
    <dxi-column [width]="300" [allowFiltering]="false" [allowSorting]="false" cellTemplate="cellTemplate"></dxi-column>
     <div *dxTemplate="let data of 'cellTemplate'">

  <div class="btn-group" dropdown style="position: absolute;">
    <button id="button-basic" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
            aria-controls="dropdown-basic">
      Button dropdown <span class="caret"></span>
    </button>
</dx-data-grid>

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    这是不可能的。正如in this post 已经解释的那样,当网页关闭时不会触发任何事件。

    但是,您可以使用onBeforeUnload 函数阻止用户关闭选项卡。详细解释可以found here

    替代方法

    但是,您可以以不同的方式解决您的问题。如果您保存计时器的启动时间并在用户单击暂停后删除该启动时间,您可以在下次启动时检测您是否有“正在运行”的计时器。此外,您需要保存一个起始值,它基本上是计时器的起始偏移量。这是该想法的工作StackBlitz

    更新:将其应用于您的示例

    使用我在聊天中从你那里得到的 Stackblitz,我将这个逻辑应用于你的示例。这是工作的StackBlitz

    【讨论】:

    • 认真的吗? :( 所以如果电脑突然关机,就不可能保存当前时间 :(
    • 没错。您唯一能做的就是在定义的时间间隔内节省时间。或者做这个服务器端。
    • 很抱歉给您带来不便,但有没有办法让服务始终在后台运行?也就是如果你启动start,那人就可以关闭一直在计时的页面
    • 这在移动设备上只能部分实现。在桌面设备上这是不可能的。 Service Worker 会最接近这一点,但它对你的用例来说太不可靠了。最好的办法是指望服务器端或定期保存值。也许只保存开始/结束时间并计算时间?这样你只需要知道它是否已经停止并且不需要定期更新而是只有在保存了“开始”但没有“结束”的情况下?
    • @MikeLanders 我更新了我的答案并创建了一个 StackBlitz 来展示这个想法。
    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多