Поддержание сеанса через угловой.js
Я работаю над проектом, используя фреймворк AngularJS. Я довольно новичок в использовании этой структуры; в прошлом я работал только с чистым JavaScript и jQuery. Проект является своего рода веб-дизайнером приложения для нишевого рынка.
когда пользователь перемещается между страницами при проектировании, я хочу поддерживать сеанс всех изменений, которые они делают.
теперь, если пользователь входит в систему, мы загружаем сеанс, используя данные из базы данных. Когда пользователь нажимает на кнопку Сохранить мы обновляем базу данных с данными сеанса. Кто-то сказал мне, что я могу поддерживать сеанс в угловом, похожем на позвоночник. Это возможно? Если да, можете ли вы направить меня на учебник, который не фокусируется на директивах или пользовательском интерфейсе? Если это невозможно, есть ли другие жизнеспособные варианты?
5 ответов:
вот своего рода фрагмент для вас:
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
поскольку ответ больше не действителен с более стабильной версией angular, я публикую более новое решение.
PHP страница: сессия.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 не все из них не хотят выставлять больше, чем необходимо.
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, потому что это переменная сеанса, которую я использую во всем моем коде.
HTML
внутри вашего html вы можете ссылаться на свой сеанс
<html ng-app="StarterApp"> <body ng-controller="AppCtrl"> {{ session.variable }} </body>
вы также можете попробовать сделать сервис на основе
window.sessionStorage
илиwindow.localStorage
для хранения информации о состоянии между перезагрузками страницы. Я использую его в веб-приложении, которое частично сделано в AngularJS, а URL-адрес страницы изменен "по-старому" для некоторых частей рабочего процесса. Веб-хранилище поддерживается даже IE8. Вот это angular-webstorage для удобства.
вы бы использовали сервис для этого в Angular. Сервис-это функция, которую вы регистрируете в Angular, и эта функция должна возвращать объект, который будет жить до тех пор, пока браузер не будет закрыт/обновлен. Поэтому это хорошее место для хранения состояния и асинхронной синхронизации этого состояния с сервером при изменении этого состояния.
обычно для случая использования, который включает в себя последовательность страниц и на заключительном этапе или странице мы отправляем данные на сервер. В этом случае нам нужно поддерживать состояние. В приведенном ниже фрагменте мы поддерживаем состояние на стороне клиента
Как упоминалось в предыдущем посте. Сеанс создается по Заводскому рецепту.
сеанс на стороне клиента также можно поддерживать с помощью рецепта поставщика значений.
пожалуйста, обратитесь к моему сообщению для полного подробности. session-tracking-in-angularjs
давайте возьмем пример корзины покупок, которую нам нужно поддерживать на разных страницах / AngularJS controller.
в типичной корзине мы покупаем продукты на различных страницах продукта / категории и продолжаем обновлять корзину. Вот эти шаги.
здесь мы создаем пользовательский инъекционный сервис, имеющий корзину внутри, используя "рецепт поставщика значений".
'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... });