2017-04-21 55 views
0

我已经创建了一个工厂作为服务来使用Web API调用从服务器获取一些数据,但是如果我需要再次获取相同的数据,我需要再次点击API,我想在更远的地方使用相同的数据并且不想再次进行Web API调用。如何在AngularJS中保存web api数据

有没有什么办法来保持角js中的数据?

+0

你可以去sessionStorage的将结果从AP存储并在您需要相同的数据再次然后,检查sessionStorage的具有数据和使用,如果没有,那么再次拨打电话,并将其存储到同一个的sessionStorage中控制器级别。它可以节省您的不必要的Api呼叫,当你有你的本地。 –

回答

1

方式在整个应用程序共享数据:

使用服务

我们可以创建一个服务setgetcontrollers之间,然后将数据在我们想要使用它的控制器功能中注入该服务。

服务:

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'); 

}); 
0

您可以使用HTML5 Web Storage

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

,如果你让你的服务,你就获取数据内部的异步调用是“静态”是有道理的缓存它们,以避免新的开销,每次需要的时候。缓存默认是禁用的。

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

如果我们有成千上万的记录作为JSON数据,它会好吗? –

+0

它是$ http服务中的一种机制,它将结果存储在一个变量中,并避免每次再次访问该服务时都发出新的调用。这是完全合法的。 – Karim