【问题标题】:Simplest way to retain values between angular pages?在角度页面之间保留值的最简单方法?
【发布时间】:2014-07-17 06:29:26
【问题描述】:

我在页面 x。我单击页面 x 上的一个操作,该操作使用新文本更新(使用 ajax)3 个 div 元素。

然后我导航到页面 y(带有角度请求),然后返回页面 x - 我用 ajax 更改的值现在消失了(它们是默认值)。

我的值不在表单内,而是在 div 元素内。

如果其中一些被更改(例如使用 ajax),在 Angular 切换页面之间保留值的最简单方法是什么?

【问题讨论】:

  • 假设您在切换页面时有一个 SPA - 那么您可以将数据保存在服务或工厂中,这些数据将被缓存为单例。
  • 使用 Angular 服务。将您的 DIV 值绑定到您的服务上公开的成员。服务值将在页面之间保持不变。

标签: angularjs


【解决方案1】:

最简单?在 $rootScope 上设置值。

$rootScope.name = name;

现在只需在任何需要名称的控制器中注入 $rootScope。

angular.module('myModule').controller('CtrlA', function($rootScope) { 
  $rootScope.name = "something";
});

angular.module('myModule').controller('CtrlB', function($rootScope) { 
  console.log($rootScope.name);
});

如果您开始向 rootScope 添加大量值,则最好使用service

类似名字这样简单的服务等价物是这样的:

angular.module('myModule').service('Name', function Name() {
  var name;

  var service = {       
   getName: function() { return name; },
   setName: function(n) { name = n; }
  };
  return service;
});

然后你可以在不同的控制器中注入这个服务。

angular.module('myModule').controller('CtrlC', function(Name) { 
  Name.setName('hello world!');
});

angular.module('myModule').controller('CtrlD', function(Name) { 
  $scope.name = Name.getName();
  console.log($scope.name);
});

【讨论】:

  • 如何在我的视图中输出根变量?
  • 就像任何其他范围变量一样 - {{name}}
  • 这是否也适用于 Angular 1.5 组件路由?我在 stackoverflw stackoverflow.com/questions/39657136/… 上发布了一个问题@我很高兴你能看看
【解决方案2】:

你有几个选择

  1. 将您的数据保存到$rootScope
  2. 创建一个service 来存储您的数据。
  3. 将您的数据保存到$cookieStore

【讨论】:

  • 4.在 url 中传递 id 并获取对象。 5.本地存储
  • @Sobieck00 我同意服务通常是更好的选择。
猜你喜欢
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多