我正在尝试使用AngularJs服务将数据从一个页面传递到另一个页面,但是无论我在一个页面上的服务中的变量中设置了什么值,它在重定向时都会丢失。有没有什么特别的方法来执行重定向?以下是我的代码流程
//创建了一个传递数据的服务
angular.module('Test').service('TestService', function() {
var new_data;
this.addData = function(page_data) {
new_data = page_data;
}
this.getData = function(){
return new_data;
}
});
//控制器A中的代码:
TestService.addData(data);
$window.location.href = "/static/html/buyer-cart-confirmation.html"
//控制器B中的代码:
data = TestService.getData();
控制器B中没有收到任何数据。有人可以帮我解决这个问题。 谢谢!
答案 0 :(得分:0)
您可以使用会话存储在同一会话(选项卡)中的不同角度实例之间序列化/反序列化数据,并且您可以使用本地存储在会话中执行相同的操作(新选项卡)。以下是两者的代码:
class SessionStorageService
setStorage:(key, value) ->
json = if value? then JSON.stringify value else null
sessionStorage.setItem key, json
getStorage:(key)->
JSON.parse sessionStorage.getItem key
pageData1:(value=null) ->
@accessor 'pageData1', value
pageData2:(value=null) ->
@accessor 'pageData2', value
# more data values defined here
accessor:(name, value)->
return @getStorage name unless value?
@setStorage name, value
angular
.module 'app.Services'
.service 'sessionStorageService', SessionStorageService
class LocalStorageService
setStorage:(key, value) ->
json = if value? then JSON.stringify value else null
localStorage.setItem key, json
getStorage:(key)->
JSON.parse localStorage.getItem key
clear: ->
@setStorage(key, null) for key of localStorage
pageData1:(value=null) ->
@accessor 'pageData1', value
pageData2:(value=null) ->
@accessor 'pageData2', value
# more data values defined here
accessor:(name, value)->
return @getStorage name unless value?
@setStorage name, value
angular
.module 'app.Services'
.service 'localStorageService', LocalStorageService
话虽如此,您需要问问自己为什么要重定向到不同的页面,并期望您的状态会以某种方式被保留?
Angular通常用于单页应用程序,它使用ui-router之类的路由框架来管理状态转换,而不是老式的点击和刷新页面模型。
换句话说,除非您打算开始一个全新的Angular应用程序,否则不应重定向。
答案 1 :(得分:0)
我认为你的逻辑错了,既然你没有提供一个Plunker,我现在无法测试它。我认为你应该像smth一样:
angular.module('Test').service('TestService', function() {
this.addData = function(page_data) {
this.new_data = page_data;
};
return this;
});
然后您可以像这样访问您的数据:
TestService.new_data
我认为它会像这样工作。