通过Angular.js维护会话

Jeh*_*lik 60 session angularjs

我正在使用AngularJS框架工作.我很擅长使用这个框架; 在过去,我只使用纯JavaScript和jQuery.该项目是针对利基市场的一种网页设计应用程序.

当用户在设计期间在页面之间移动时,我想要维护他们正在进行的所有更改的会话.

现在,如果用户登录,我们使用数据库中的数据加载会话.当用户单击"保存"按钮时,我们使用会话数据更新数据库.有人告诉我,我可以在Angular中保持类似于骨干的会话.这可能吗?如果是的话,您能指导我一个不关注指令或UI的教程吗?如果这是不可能的,还有其他可行的选择吗?

Val*_*nov 58

这是一种代码片段:

app.factory('Session', function($http) {
  var Session = {
    data: {},
    saveSession: function() { /* save session data to db */ },
    updateSession: function() { 
      /* load data from db */
      $http.get('session.json').then(function(r) { return Session.data = r.data;});
    }
  };
  Session.updateSession();
  return Session; 
});
Run Code Online (Sandbox Code Playgroud)

以下是Plunker示例,您可以如何使用它:http://plnkr.co/edit/Fg3uF4ukl5p88Z0AeQqU?p = preview

  • 请记住,本地存储是在子域之间共享的,所以有点不那么安全. (5认同)

Dem*_*ave 9

因为对于更稳定的角度版本,答案不再有效,我发布了一个更新的解决方案.

PHP页面:session.php

if (!isset($_SESSION))
{    
    session_start();
}    

$_SESSION['variable'] = "hello world";

$sessions = array();

$sessions['variable'] = $_SESSION['variable'];

header('Content-Type: application/json');
echo json_encode($sessions);
Run Code Online (Sandbox Code Playgroud)

在Angular中仅发送您想要的会话变​​量,而不是所有会话变量都不希望暴露超出需要的内容.

JS All Together

var app = angular.module('StarterApp', []);
app.controller("AppCtrl", ['$rootScope', 'Session', function($rootScope, Session) {      
    Session.then(function(response){
        $rootScope.session = response;
    });
}]);

 app.factory('Session', function($http) {    
    return $http.get('/session.php').then(function(result) {       
        return result.data; 
    });
}); 
Run Code Online (Sandbox Code Playgroud)
  • 做一个简单的使用工厂获得会话.
  • 如果您想在浏览器中进行发布以使页面不可见,那么我只是简化它
  • 将工厂添加到控制器
  • 我使用rootScope,因为它是我在所有代码中使用的会话变量.

HTML

在您的HTML中,您可以参考您的会话

<html ng-app="StarterApp">

<body ng-controller="AppCtrl">
{{ session.variable }}
</body>
Run Code Online (Sandbox Code Playgroud)


ger*_*tas 8

您还可以尝试基于window.sessionStoragewindow.localStorage在页面重新加载之间保持状态信息来进行服务.我在Web应用程序中使用它,该应用程序部分在AngularJS中制作,并且页面URL以"旧方式"更改为工作流的某些部分.IE8甚至支持Web存储.为方便起见,这里是angular-webstorage.