2014-02-27 95 views
0

角$範圍我有幾個控制器的角度應用。即使用戶導航到另一個控制器並返回時,我也希望每個控制器都保持其狀態。基本上,我希望每個視圖都像用戶上次看到的一樣加載(除非他們完全從應用程序導航或刷新等)。維持在導航

我知道如何使用服務控制器之間共享狀態,但是這不是我想要的。我可以爲每個控制器創建一項新服務,或將所有內容都放在$rootScope上,但看起來不對。

什麼是做到這一點的推薦的方法?

+0

如果可能:包括控制器將其狀態恢復到URL所需的所有內容。 – TheHippo

+0

使用URL是不是在這種情況下,實際的,因爲我在處理事情就像從AJAX調用返回的部分完成的表單和數據。 – Tamlyn

+0

爲什麼不願意使用服務? –

回答

1

我將存儲在$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); 
    }); 
}); 
+0

謝謝,但我並不真的期待重新加載頁面之間持續存在,只有同一個瀏覽器頁面內的角度視圖之間(我們需要這個東西更好的話!)。我意識到你們的解決方案都有,但我希望有一個更簡單或更通用的解決方案。 (+1) – Tamlyn

+0

是的,我明白了。如果會話持久性不是你所需要的,那麼簡單的服務可能就是你想要的。如果數據來自多個來源(服務器,緩存和其他服務),將這些數據包裝在一個服務中可能是最好的方法。然後,只需在控制器實例化處獲取''''''範圍'$ scope'上的'set' –