如何在Angular中使用服务来存储变量?

时间:2017-01-06 11:31:55

标签: angularjs cordova ionic-framework

如何使用服务存储变量,以便在按下后退按钮时可以在之前的控制器中访问它?  例如:

.controller('myCtrl', function($scope, myservice) {
 console.log(myservice.myvar.myval)
 // output: undefined pressing back button
  });

.controller('myCtrl2', function($scope, myservice) {
myservice.myvar.myval = "This I want in controller myCtrl on pressing back button"
 console.log(myservice.myvar.myval)
// outputs the value
});

如果服务不是最佳方法,我应该使用$rootScope,那么它是否可以完成这项工作。

P.S angular.modulemyservice已定义。

3 个答案:

答案 0 :(得分:2)

您需要使用 getter-setter 。 例如:

angular.module('MyModule', [])
.service('myservice', function () {
   this.myval = "value";
   this.getValue = function () { return this.myval }; //getter
   this.setValue = function (val) { this.myval = val }; //setter
})

.controller('myCtrl', function($scope, myservice) {
  console.log(myservice.getValue());
  // get the value here
 });

.controller('myCtrl2', function($scope, myservice) {
   myservice.setValue("This I want in controller myCtrl on pressing back button");
  // Set the value here
});
  

仅供参考。请不要复制粘贴并运行代码。

答案 1 :(得分:1)

Angular服务是单例,可以在组件之间自由共享,这些组件可以访问依赖项注入。您可以使用getter和setter的模块模式定义闭包,或者直接将属性附加到要返回的对象。

答案 2 :(得分:0)

我看到4个选项,您可以将它存储在服务中,$ rootScope中,localStorage中用于持久存储,以及sessionStorage中仅存储应用程序生命周期中的数据。有一个很好的模块包装localStorage和sessionStorage,并使其使用更简单:

http://ngmodules.org/modules/ngStorage