【问题标题】:How to persist web api data in AngularJS如何在 AngularJS 中持久化 web api 数据
【发布时间】:2017-04-21 17:00:35
【问题描述】:

我已经创建了一个工厂作为服务来使用 Web API 调用从服务器获取一些数据,但是如果我需要再次获取相同的数据,我需要再次点击 API,我想在其他地方使用相同的数据并且不要不想再次调用 Web API。

有没有办法在 Angular js 中持久化数据?

【问题讨论】:

  • 您可以使用 sessionStorage 来存储来自 Api 的结果,然后当您再次需要相同的数据时,检查 sessionStorage 是否有数据,如果没有则使用,然后再次拨打电话并将其存储到同一个控制器级别的 sessionStorage。当您与本地人通话时,它可能会节省您不必要的 API 调用。

标签: angularjs asp.net-web-api


【解决方案1】:

跨应用程序共享数据的方式:

1. 使用服务

我们可以为setget之间的数据创建一个服务controllers,然后将该服务注入到我们想要使用它的控制器函数中。

服务:

app.service('setGetData', function() {
  var data = '';
    getData: function() { return data; },
    setData: function(requestData) { data = requestData; }
});

控制器:

app.controller('myCtrl1', ['setGetData',function(setGetData) {

  // To set the data from the one controller
  var data = 'Hello World !!';  
  setGetData.setData(data);

}]);

app.controller('myCtrl2', ['setGetData',function(setGetData) {

  // To get the data from the another controller  
  var res = setGetData.getData();
  console.log(res); // Hello World !!

}]);

在这里,我们可以看到myCtrl1用于设置数据,myCtrl2用于获取数据。因此,我们可以像这样将数据从一个controller 共享到another controller,而无需进行任何进一步的 API 调用。

2. 使用会话存储

创建工厂服务,该服务将根据密钥保存并返回保存的会话数据。

app.factory('storageService', ['$rootScope', function($rootScope) {

    return {
        get: function(key) {
            return sessionStorage.getItem(key);
        },
        save: function(key, data) {
            sessionStorage.setItem(key, data);
        }
    };
}]);

控制器:

将控制器中的storageService依赖注入到setget会话存储中的数据。

app.controller('myCtrl',['storageService',function(storageService) {

  // Save session data to storageService
  storageService.save('key', 'value');

  // Get saved session data from storageService
  var sessionData = storageService.get('key');

});

【讨论】:

    【解决方案2】:

    如果您在服务内部进行异步调用并且您正在获取的数据是“静态的”,那么缓存它们以避免每次需要它们时产生新的开销是有意义的。默认情况下禁用缓存。

    $http({
     method: 'GET',
     cache: true
    }
    

    【讨论】:

    • 如果我们有数千条记录作为 JSON 数据,缓存它会好吗?
    • 它是 $http 服务内部的一种机制,用于存储一个带有结果的变量,并避免每次再次访问该服务时都进行新的调用。这是完全合法的。
    【解决方案3】:

    您可以为此使用HTML5 Web Storage

    localStorage.setItem("lastname", "Smith");
    console.log(localStorage.getItem("lastname"));
    

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2019-02-03
      相关资源
      最近更新 更多