Angularjs 在导航时保持角度范围

Angularjs 在导航时保持角度范围,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我有一个有几个控制器的Angular应用程序。我希望每个控制器保持其状态,即使用户导航到另一个控制器并再次返回。基本上,我希望每个视图都能像用户上次看到的那样加载(除非他们完全离开应用或刷新等) 我知道如何在使用服务的控制器之间共享状态,但这不是我想要的。我可以为每个控制器创建一个新服务,或者将所有内容都放在$rootScope上,但这似乎是错误的 推荐的方法是什么?我会将任何持久数据存储在$cookieStore中,甚至可能将其封装在服务中,以避免记住cookie的实际接口。下面是一个例子:

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

我知道如何在使用服务的控制器之间共享状态,但这不是我想要的。我可以为每个控制器创建一个新服务,或者将所有内容都放在
$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);
    });
});

如果可能:包括控制器将其状态恢复到URL所需的一切。在这种情况下,使用URL是不实际的,因为我处理的是部分完成的表单和AJAX调用返回的数据。为什么不愿意使用服务?@Tamlyn所以使用服务。你可以使用嵌套,但这有点难以理解不知道您的控制器/状态之间的关系。谢谢,但我并不希望在页面重新加载之间保持一致,只希望在同一浏览器页面中的角度视图之间保持一致(我们需要更好的词语来描述这一点!)。我知道你的解决方案两者都有,但我希望有一个更简单或更通用的解决方案。(+1)是的,我明白了。如果会话持久性不是您需要的,那么一个简单的服务可能就是您想要的。如果数据来自多个源(服务器、缓存、其他服务),将这些数据包装到一个服务中可能是最好的方法。然后只需在控制器实例化上获取,
设置
$scope
修改