如何使用服务存储变量,以便在按下后退按钮时可以在之前的控制器中访问它? 例如:
.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.module
和myservice
已定义。
答案 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,并使其使用更简单: