Angular UI Router:如何保存父状态?

时间:2015-01-29 15:05:04

标签: angularjs angular-ui-router ionic

我使用IonicFramework,Angular UI路由器和嵌套视图。

我的路由示例:

// Method app.config()
$stateProvider
      .state('main', {
        url: '',
        views: {
          '@' : {
            templateUrl: 'layout/main.html'
          },
          'topbar@main' : {
            templateUrl: 'component/topbar/topbar.html'
          },
          'content@main' : {
            templateUrl: 'component/pager/pager.html'
          }
        }
      })
      .state('settings', {
        templateUrl: 'component/settings/settings.html'
      })
    ;

我尝试从'主'变为'设置'状态 - 一切正常:$ state.go('settings')。

当我尝试点击'<返回'并返回,主状态重置为初始状态。

我发现提示here,“设置”必须是“主要”的子级。但我不知道如何实现它。我所有的尝试都失败了。

问题:如何切换到其他视图,保存上一个视图的状态?

感谢。

1 个答案:

答案 0 :(得分:0)

关于保存应用程序状态,ui-router没有没有。这里的解决方案是使用一个服务来保存您的应用程序状态/数据(在AngularJS的实现中,服务是单例)。

基本上就是这样:

angular.service('MyService', function() {
    var data = {};

    return {
        get: function() {
            return data;
        }
    };
});

function State1Controller($scope, MyService) { // you rely on AngularJS's built-in $injector

    $scope.data = MyService.get();
}

现在每次使用此控制器时,$scope.data都会指向服务中的相同对象引用(它是 singleton )。 因此,您对$scope.data所做的任何更改都将被"保存"无论您使用何种控制器或执行多少状态更改。

另外,请记住,执行$scope.data = {}; 打破这个"技巧"如果您在以相同状态加载的多个控制器中使用它,则会为$scope.data分配新引用。除非你知道自己在做什么,否则你应该从不覆盖它。