角$範圍我有幾個控制器的角度應用。即使用戶導航到另一個控制器並返回時,我也希望每個控制器都保持其狀態。基本上,我希望每個視圖都像用戶上次看到的一樣加載(除非他們完全從應用程序導航或刷新等)。維持在導航
我知道如何使用服務控制器之間共享狀態,但是這不是我想要的。我可以爲每個控制器創建一項新服務,或將所有內容都放在$rootScope
上,但看起來不對。
什麼是做到這一點的推薦的方法?
角$範圍我有幾個控制器的角度應用。即使用戶導航到另一個控制器並返回時,我也希望每個控制器都保持其狀態。基本上,我希望每個視圖都像用戶上次看到的一樣加載(除非他們完全從應用程序導航或刷新等)。維持在導航
我知道如何使用服務控制器之間共享狀態,但是這不是我想要的。我可以爲每個控制器創建一項新服務,或將所有內容都放在$rootScope
上,但看起來不對。
什麼是做到這一點的推薦的方法?
我將存儲在$cookieStore
任何持久性數據,甚至將其封裝在一個服務,以避免記憶什麼的界面到cookie實際上是。以下是一個示例:
var app = angular.module('app', [
'ngRoute',
'ngCookies'
]);
app.service('ticketService', function ($cookieStore) {
this.getTicket = function() {
var ticket = $cookieStore.get('currentTicket');
// Check server for ticket? (additional business logic)
return ticket;
};
this.setTicket = function (ticket) {
// Validate correct ticket? (additional business logic)
$cookieStore.set('currentTicket', ticket);
};
});
app.controller('ticketController', function ($scope, ticketService) {
var defaultTicket = {
name: '',
description: ''
};
$scope.ticket = ticketService.getTicket() || defaultTicket;
$scope.$watch('ticket', function (oldValue, newValue) {
if (oldValue === newValue) { return; }
ticketService.setTicket(newValue);
});
});
謝謝,但我並不真的期待重新加載頁面之間持續存在,只有同一個瀏覽器頁面內的角度視圖之間(我們需要這個東西更好的話!)。我意識到你們的解決方案都有,但我希望有一個更簡單或更通用的解決方案。 (+1) – Tamlyn
是的,我明白了。如果會話持久性不是你所需要的,那麼簡單的服務可能就是你想要的。如果數據來自多個來源(服務器,緩存和其他服務),將這些數據包裝在一個服務中可能是最好的方法。然後,只需在控制器實例化處獲取''''''範圍'$ scope'上的'set' –
如果可能:包括控制器將其狀態恢復到URL所需的所有內容。 – TheHippo
使用URL是不是在這種情況下,實際的,因爲我在處理事情就像從AJAX調用返回的部分完成的表單和數據。 – Tamlyn
爲什麼不願意使用服務? –