将Angular Scope从上次浏览器会话缓存到新加载的最佳技术是什么?
这可能吗?
包括控制下次创建完整范围的缓存吗?
当从后端加载新数据时,覆盖加载的缓存范围?
答案 0 :(得分:3)
这与如何使用javascript在浏览器中缓存数据有关。
有一些解决方案你可以专门研究角度:
Angular服务可用于在同一会话中的路由之间共享范围。但是,如果您关闭浏览器,则需要本地/会话存储,Cookie或服务器端解决方案之一。
Cookies是一种直接的键值存储。易于使用,可快速保存数据。
angular.module('cookiesExample', ['ngCookies'])
.controller('ExampleController', ['$cookies', function($cookies) {
// Retrieving a cookie
var favoriteCookie = $cookies.get('myFavorite');
// Setting a cookie
$cookies.put('myFavorite', 'oatmeal');
}]);
不要使用Cookie来存储大量数据,并将其限制为应在每次请求时发送的数据,例如身份验证令牌。
AngularJS模块,使Web存储以 Angular Way 工作。 包含两项服务:
$localStorage
和$sessionStorage
。
bower install ngstorage
通过引用传递
$localStorage
(或$sessionStorage
) 在$scope
的普通ol' JavaScript的:$scope.$storage = $localStorage;
并像你一样使用它 - 已经知道:
<body ng-controller="Ctrl"> <button ng-click="$storage.counter = $storage.counter + 1">{{$storage.counter}}</button> </body>
或者,使用
$default()
方法指定默认值:$scope.$storage = $localStorage.$default({ counter: 42 });
通过此设置,更改将自动同步
$scope.$storage
,$localStorage
和localStorage
- 甚至跨越 不同的浏览器标签!
angular-local-storage模块提供了多种存储数据的方法。它的功能丰富,并提供高级选项和自定义。
window.angular.module('demoModule', ['LocalStorageModule'])
.config(function(localStorageServiceProvider) {
localStorageServiceProvider.setPrefix('demoPrefix');
// localStorageServiceProvider.setStorageCookieDomain('example.com');
// localStorageServiceProvider.setStorageType('sessionStorage');
})
.controller('DemoCtrl',
function($scope, localStorageService) {
$scope.localStorageDemo = localStorageService.get('localStorageDemo');
$scope.$watch('localStorageDemo', function(value) {
localStorageService.set('localStorageDemo', value);
$scope.localStorageDemoValue = localStorageService.get('localStorageDemo');
});
$scope.storageType = 'Local storage';
if (localStorageService.getStorageType().indexOf('session') >= 0) {
$scope.storageType = 'Session storage';
}
if (!localStorageService.isSupported) {
$scope.storageType = 'Cookie';
}
$scope.$watch(function() {
return localStorageService.get('localStorageDemo');
}, function(value) {
$scope.localStorageDemo = value;
});
$scope.clearAll = localStorageService.clearAll;
}
);