通过Angular.js维护会话

我正在使用AngularJS框架开展一个项目。 我很新的使用这个框架; 在过去,我只使用纯JavaScript和jQuery。 该项目是一个小众市场的网页devise应用程序。

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

现在,如果用户login,我们使用数据库中的数据加载会话。 当用户点击保存button时,我们用会话数据更新数据库。 有人告诉我,我可以保持与Angular相似的会话。 这可能吗? 如果是的话,你可以请教我一个不关注指令或UI的教程吗? 如果这是不可能的,还有其他可行的select吗?

以下是您的一个片段:

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

这里是Plunker示例如何使用它: http ://plnkr.co/edit/Fg3uF4ukl5p88Z0AeQqU?p=preview

您也可以尝试基于window.sessionStoragewindow.localStorage进行服务,以在页面重新加载之间保持状态信息。 我在AngularJS中部分制作的网页应用程序中使用它,页面url在工作stream程的某些部分以“旧的方式”更改。 即使是IE8也支持Web存储。 为了方便,这里是angular-webstorage 。

因为答案不再有效的更稳定版本的angular度,我发布了一个更新的解决scheme。

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

只发送你想在Angular中使用的会话variables,并不是所有的人都不想公开更多的东西。

JS一起

 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; }); }); 
  • 做一个简单的获取使用工厂会话。
  • 如果您希望在浏览器中进行浏览时使页面不可见,我只是简化它
  • 将工厂添加到控制器
  • 我使用rootScope,因为它是我在我的所有代码中使用的会话variables。

HTML

在你的html里面你可以引用你的会话

 <html ng-app="StarterApp"> <body ng-controller="AppCtrl"> {{ session.variable }} </body> 

你会在Angular中使用这个服务。 服务是您向Angular注册的函数,该函数的作用是返回一个对象,直到浏览器closures/刷新。 所以这是一个存储状态的好地方,并且随着状态的变化asynchronous同步服务器的状态。

通常,对于涉及一系列页面的用例,在最后阶段或页面中,我们将数据发布到服务器。 在这种情况下,我们需要维护这个状态。 在下面的代码片段中,我们维护客户端的状态

正如上面的post所述。 会话是使用工厂配方创build的。

客户端会话也可以使用值提供者配方来维护。

请参阅我的文章的完整细节。 会话追踪中angularjs

我们来看一个我们需要在各种页面/ angularjs控制器中维护的购物车的例子。

在典型的购物车中,我们在各种产品/分类页面上购买产品,并不断更新购物车。 这是步骤。

在这里,我们使用“价值提供者配方”创build具有购物车的自定义注射服务。

 'use strict'; function Cart() { return { 'cartId': '', 'cartItem': [] }; } // custom service maintains the cart along with its behavior to clear itself , create new , delete Item or update cart app.value('sessionService', { cart: new Cart(), clear: function () { this.cart = new Cart(); // mechanism to create the cart id this.cart.cartId = 1; }, save: function (session) { this.cart = session.cart; }, updateCart: function (productId, productQty) { this.cart.cartItem.push({ 'productId': productId, 'productQty': productQty }); }, //deleteItem and other cart operations function goes here... });