在导航上保持Angular $范围

时间:2014-02-27 14:27:20

标签: angularjs angularjs-scope

我有一个带有多个控制器的Angular应用程序。我希望每个控制器都能保持其状态,即使用户导航到另一个控制器并再次返回。基本上我希望每个视图都像用户上次看到它一样加载(除非他们完全离开应用程序或刷新等)。

我理解如何使用服务在控制器之间共享状态,但这不是我想要的。我可以为每个控制器创建一个新服务,或者将所有内容放在$rootScope上,但这似乎不对。

建议的方法是什么?

1 个答案:

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