【问题标题】:Angular PWA and NGRX.. fetch data if offlineAngular PWA 和 NGRX .. 离线获取数据
【发布时间】:2020-06-22 09:41:50
【问题描述】:

我想问一下,即使 Angular 应用程序由于网络或没有互联网而关闭,我是否仍然可以使用 ngrx 检索数据。 这个想法就像.. 如果没有互联网,则提取到目前为止已保存在商店中的默认数据。

【问题讨论】:

  • 是的,PWA 是一组功能,您可以使用它们来实现类似的功能,但问题仍然很广泛。尝试实现一些东西并将问题更改为更具体。进一步阅读:stackoverflow.com/tourstackoverflow.com/help/how-to-ask
  • @AlexBiro 是的,我正在使用 PWA .. 所以我有一个人员列表。如果该站点处于离线状态,我应该仍然可以查看列表.. 一旦互联网恢复正常.. 然后它应该自动重新加载。

标签: angular progressive-web-apps ngrx


【解决方案1】:

对于简约的 PWA,您需要执行以下操作:

首先你注册服务工作者:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
      navigator.serviceWorker.register('/serviceworker.js').then(function(registration) {
        // Registration was successful
        console.log('ServiceWorker registration successful with scope: ', registration.scope);
      }, function(err) {
        // registration failed :(
        console.log('ServiceWorker registration failed: ', err);
      });
    });
  }

首先您检查它是否在您的浏览器中可用。如果是,那么您需要将路径传递给您的服务人员。在这个例子中是/serviceworker.js

记住:如果您使用 HTTP 或文件系统 C://,则注册将不起作用,您需要使用 HTTPS 或 localhost,它也应该可以工作。

现在是服务工作者部分。使用此示例,您将缓存您访问的每个页面,并且如果您关闭网络,它仍然可以工作。

//serviceworker.js

var CACHE_NAME = "my_cache_v1";

self.addEventListener('fetch', function(event) {
    event.respondWith(
      caches.match(event.request)
        .then(function(response) {
          // Cache hit - return response
          if (response) {
            return response;
          }
  
          return fetch(event.request).then(
            function(response) {
              // Check if we received a valid response
              if(!response || response.status !== 200 || response.type !== 'basic') {
                return response;
              }
  
              // IMPORTANT: Clone the response. A response is a stream
              // and because we want the browser to consume the response
              // as well as the cache consuming the response, we need
              // to clone it so we have two streams.
              var responseToCache = response.clone();
  
              caches.open(CACHE_NAME)
                .then(function(cache) {
                  cache.put(event.request, responseToCache);
                });
  
              return response;
            }
          );
        })
      );
  });

您可以使用 PWA 做更多事情。您可以要求用户安装您的应用程序,也可以为用户订阅推送通知。实际上,我在一个小型库上工作,应该为您简化它,您可以在这里查看它:(仍在开发中)

https://github.com/ilijanovic/serviceHelper

https://www.npmjs.com/package/servicehelper

要使其可安装,您需要在您的站点中包含一个具有基本属性的清单。

【讨论】:

  • 我想在 Angular 或任何 UI 框架中理解这种状态管理。我在后端所知道的 CQRS 是 .. 保存到数据库,然后保存然后将其放到某个地方以供以后检索所以当我们提取数据时,我们可以从缓存中提取数据。这种状态管理是否应用了相同的原则?
  • 与 PWA 一起发生在客户端。在此示例中,服务工作者已启用,并且位于客户端和“互联网”之间。因此,如果您发出请求,它首先通过服务工作者。它会检查您是否已经完成了该请求并从缓存存储中返回给您,如果没有,它将执行网络请求并且该响应将被缓存,以便下次从缓存中加载。它也称为缓存优先,因为您在发出网络请求之前首先查看缓存。还有其他策略,例如首先向网络发出请求并且只访问
  • @JaysonGonzaga 如果您离线,缓存。
  • 所以缓存的数据来自ngrx?你怎么称呼这些策略?它们与 ngrx 或任何状态管理框架有关吗?抱歉,我只是这部分 UI 开发的初学者
  • PWA,service-workers 与任何 Farmeworks 无关。它们可以与 angular、vue.js、react、多页面站点等一起使用。
猜你喜欢
  • 2018-10-23
  • 2019-05-09
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
相关资源
最近更新 更多