当前位置: 首页 > 面试题库 >

在AngularJS中保存视图状态

浦德义
2023-03-14
问题内容

我开发了一个HTML 5应用程序,并具有加载用户评论的视图。它是递归的:任何注释都可以具有可单击的子注释,这些子注释正在同一视图中加载并使用相同的控制器。

一切都好。但是,当我想返回时,评论会再次加载,而我的位置和子评论也会丢失。

返回时可以保存视图的状态吗?我想我可以使用某种技巧,例如:每当我单击子注释并隐藏上一个视图时,都可以追加一个新视图。但是我不知道该怎么做。


问题答案:

是的,您应该将状态保留在服务中,而不是在控制器内部加载和保留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 */);
});

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

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!
    }
  };
});

当您来回浏览视图时,它们的状态将被保留,因为您的服务是单例的,是在您第一次将其注入控制器时初始化的。

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



 类似资料:
  • 问题内容: 考虑从ui-router文档获取的以下状态: 以及状态“ state1”的“ partials / state1.html”控制器: 是否有任何内置功能可从控制器内部或模板内部确定控制器/模板与哪个状态关联? 例如: 而且,如果没有内置解决方案,您将如何“装饰” $ state或$ stateParams以包含此信息? 我想出的唯一解决方案是使用$ state.get(),然后使用控制

  • 我已经为recyclerView创建了一个适配器和ViewHolder。我将itemView的imageButton绑定到Viewholder中。并在onBindViewHolder中设置了onClickListener。 一切正常,但问题是,当我向下滚动列表时,imageButton的选定状态会因选定项目而改变,列表底部的一些项目已显示为选中。 下面是一些代码 适配器类 接口类 活动内的接口回调

  • 我正在寻找一种方法,在运行时改变JavaFX FXML应用程序的视图,并保存结果,以便在下次应用程序启动时显示。有办法吗?我在网上搜索,但没有找到任何解决方案!例如:我有一个函数,可以在GridPane中添加标签,并保存新添加的标签。在我的应用程序下一次启动时,新标签出现了。这是一个数据库应用程序,用户可以为自定义数据添加新的数据库字段。

  • 视图(在本例中,ViewPager)有自己的保存和恢复状态的实现,我依靠它在设备旋转后将ViewPager保持在同一页面上。 当ViewPager在活动中时,它工作得非常好。我滚动到一个页面,旋转设备,它仍然在那个页面上。在SaveInstanceState中不需要任何代码。 我已经把那个活动转化成了一个片段。现在,ViewPager无法保持其状态!如果我滚动到一个页面并旋转设备,它会返回到第1页

  • 问题内容: 我有在同一活动中多次动态添加的 自定义 。 每个自定义视图实例在其他东西旁边都有一个孩子。该有它的 ID ,它是同每个视图的实例。 对于每个自定义视图实例,我在创建活动时都设置了不同的内容。当我旋转屏幕时,将重新创建活动,但是现在每个活动都显示相同(文本与最后一个实例的文本相同)。 这是因为实例状态的保存和还原会自动保存一些信息,但是该信息显然与ID链接,在我的情况下会产生问题。 有没

  • 我需要允许用户从他的电脑选择一个图像,然后这个图像应该保存在数据库中的一个blob列。我有以下用于选择图像的代码: 然后我必须将图像强制转换为base64以发送到后面(java),然后在后面部分将base64字符串插入de blob列?还是我得用其他方式做?是我第一次要保存形象。