使用AngularJs将数据传递到另一个页面

时间:2014-11-29 20:31:59

标签: angularjs

我正在尝试使用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中没有收到任何数据。有人可以帮我解决这个问题。  谢谢!

2 个答案:

答案 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

我认为它会像这样工作。