【发布时间】:2017-10-25 14:13:39
【问题描述】:
我有两个页面:my-view1 和 my-view2。
在 my-view1 上,我有两个按钮可以在 LocalStorage 中添加和删除数据。
在 my-view2 上,我有两个简单的 div 读取(显示)总值和过去 6 个月的总值。
但是,在第二个页面上,如果页面没有刷新,值不会更新。我希望 my-view2 中的值在每次加载页面时自动更新(查看,即使缓存)。
这是一个带有 my-view2 的 plnkr,因此您可以理解我正在尝试做的事情。
https://plnkr.co/edit/ul4T2mduxjElCN4rUUKd?p=info
我该怎么做?
【问题讨论】:
-
您可以使用 websockets 来动态更新您的页面(view-2),无论何时更改值或您有任何后端,您都可以为此目的使用事件流。对于当前场景,您可以简单地使用 setinterval 来检查您本地存储的每一秒是否有任何更改反映您页面中的更改。
-
非常感谢您的回复!我目前正在将此页面构建为 PWA。即使离线,websockets 也会工作吗?另外,使用 setInterval 会让应用程序休眠吗?还是会持续运行?
-
setInterval 将在离线模式下工作,是的,您可以设置一个逻辑来识别如果应用程序处于睡眠模式,您可以停止间隔检查,当从睡眠模式唤醒时,您可以恢复。但是对于 websocket,您需要有效的互联网连接,如果您同时使用 myview-1 和 myview-2,您可以使用发布消息来通信和更新 my-view-2。
-
所以我唯一的选择仍然是 setInterval?我不知道设置一个“逻辑”来识别应用程序是否处于睡眠模式,因为我刚开始使用 JS 和 Polymer,并遵循入门指南。我在想也许有一种方法可以在每次查看页面时重置该值。或者,我可以设置一个在单击时更新值的按钮吗?
-
是的,您可以设置一个按钮,甚至可以设置一个事件侦听器,比如说Page Visibility API,它可以触发可见或隐藏状态,您可以使用这些输出来执行何时停止间隔和如果您的页面再次处于活动状态,则使用 clearinterval 函数逻辑开始间隔始终是您想要的程序结果。
标签: javascript data-binding polymer