Session 如何在多页应用程序中保持会话?
我有一个带有用户身份验证的单页应用程序,在那里共享会话信息没有问题Session 如何在多页应用程序中保持会话?,session,angularjs,Session,Angularjs,我有一个带有用户身份验证的单页应用程序,在那里共享会话信息没有问题 然而,我有一部分网站是静态页面,我只想包括会话信息(登录用户,或登录表单)。如何在两个应用程序之间共享会话信息?我建议创建一个服务来包装localStorage或其他API来存储持久数据。是一个使用localStorage实现的示例 这个实现是同步的,但是如果我像使用websql或者甚至使用server db,那么我会重构它以用于返回存储对象 控制器 var demo = angular.module('demo', [ 'ap
然而,我有一部分网站是静态页面,我只想包括会话信息(登录用户,或登录表单)。如何在两个应用程序之间共享会话信息?我建议创建一个服务来包装
localStorage
或其他API来存储持久数据。是一个使用localStorage
实现的示例
这个实现是同步的,但是如果我像使用websql
或者甚至使用server db,那么我会重构它以用于返回存储对象
控制器
var demo = angular.module('demo', [ 'appStorage' ]);
demo.controller('AppStorageController', [ '$scope', 'appStorage',
function($scope, appStorage) {
appStorage('MyAppStorage', 'myAppStorage', $scope);
} ]);
HTML
<div ng-controller="AppStorageController">
<p>Local Storage: {{myAppStorage}}</p>
<p>
Username: <input type="text" ng-model="myAppStorage.username"></input>
</p>
<p>
Remember me: <input type="checkbox"
ng-model="myAppStorage.rememberMe"></input>
</p>
</div>
如何使用此
appStorage
服务清理属性或存储应用程序。例如,如果我创建了一个FooStorage
应用程序,并使用appStorage('FooStorage','bar',$scope')在$scope
下放置了一个bar
属性
那么我该怎么做才能只清理条
属性,如果我需要清理整个FooStorage
?@skip我会向api添加一个removeApp方法,该方法将通过应用程序的名称调用localStorage.removeItem在本例中是FooStorage。如果要删除属性,请添加一个删除方法,该方法将删除映射中的属性,然后将该值重新保存到localStorage,应该调用fooStore.clear()代码>未清除存储在fooStore
中的所有数据?即使在调用fooStore.clear()后重新加载页面,我也会获取存储的数据代码>。如何清除fooStore
中的所有数据?谢谢
angular.module('appStorage', []).factory('appStorage',
[ '$window', function($window) {
var appStorages = {};
var api = undefined;
if ($window.localStorage) {
api = {
set : function(name, value) {
$window.localStorage.setItem(name, JSON.stringify(value));
},
get : function(name) {
var str = $window.localStorage.getItem(name);
var val = {};
try {
val = str ? JSON.parse(str) : {};
}
catch (e) {
console.log('Parse error for localStorage ' + name);
}
return val;
},
clear : function() {
$window.localStorage.clear();
}
};
}
// possibly support other
if (!api) {
throw new Error('Could not find suitable storage');
}
return function(appName, property, scope) {
if (appName === undefined) {
throw new Error('appName is required');
}
var appStorage = appStorages[appName];
var update = function() {
api.set(appName, appStorage);
};
var clear = function() {
api.clear(appName);
};
if (!appStorage) {
appStorage = api.get(appName);
appStorages[appName] = appStorage;
update();
}
var bind = function(property, scope) {
scope[property] = appStorage;
scope.$watch(property, function() {
update();
}, true);
};
if (property !== undefined && scope !== undefined) {
bind(property, scope);
}
return {
get : function(name) {
return appStorage[name];
},
set : function(name, value) {
appStorage[name] = value;
update();
},
clear : clear
};
};
} ]);