angularjs - 在 AngularJS 中保存 View 的状态

标签 angularjs angularjs-scope

我开发了一个 HTML 5 应用程序,并有一个加载用户评论的 View 。它是递归的:任何评论都可以有可点击的子评论,它们加载在同一个 View 中并使用同一个 Controller 。

一切都好。但是,当我想返回时,评论又被加载了,我失去了我加载的位置和子评论。

返回时可以保存 View 的状态吗?我想我也许可以使用某种技巧,例如:每次单击子评论并隐藏以前的 View 时附加一个新 View 。但我不知道该怎么做。

最佳答案

是的,您应该将状态保存在服务中,而不是在 Controller 中加载和保存 UI 的状态。这意味着,如果您这样做:

app.config(function($routeProvider){
 $routeProvider.when('/', {
   controller: 'MainCtrl'
 }).when('/another', {
   controller: 'SideCtrl'
 });
});

app.controller('MainCtrl', function($scope){
  $scope.formData = {};   

  $scope./* other scope stuff that deal with with your current page*/

  $http.get(/* init some data */);
});

您应该将初始化代码更改为您的服务,以及那里的状态,这样您就可以在多个 View 之间保持状态:

app.factory('State', function(){
  $http.get(/* init once per app */);

  return {
    formData:{},
  };
});

app.config(function($routeProvider){
 $routeProvider.when('/', {
   controller: 'MainCtrl'
 }).when('/another', {
   controller: 'SideCtrl'
 });
});

app.controller('MainCtrl', function($scope, State){
  $scope.formData = State.formData;   

  $scope./* other scope stuff that deal with with your current page*/
});

app.controller('SideCtrl', function($scope, State){
  $scope.formData = State.formData; // same state from MainCtrl

});

app.directive('myDirective', function(State){
  return {
    controller: function(){
      State.formData; // same state!
    }
  };
});

当您来回查看 View 时,它们的状态将被保留,因为您的服务是一个单例,当您第一次将其注入(inject) Controller 时已初始化。

还有新的ui.router ,它有一个状态机,它是 $routeProvider 的低级版本您可以使用 $stateProvider 细粒度保持状态,但它目前是实验性的(并将在 angular 1.3 上发布)

关于angularjs - 在 AngularJS 中保存 View 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714409/

相关文章:

angularjs - 如何在 ui-router 中使用 stateParam 设置子状态

javascript - 使用 Angular js中的服务更新范围变量

javascript - AngularJS 多项目轮播

javascript - 为什么 Angular 事件在设备上会延迟?

javascript - 保存全局变量以供观看的指令的最佳方法

angularjs - Angular "="范围不适用于驼峰命名法

javascript - AngularJs - 在准备好之前访问 $scope 变量的代码

javascript - 从指令访问 AngularJS 范围

javascript - 使用 angular js 和 $http 请求登录不起作用

javascript - 未知提供商 : myFactProvider <- myFact <- thirdCtrl