在AngularJS中的页面之间共享数据返回空

时间:2015-04-04 16:31:01

标签: javascript angularjs angularjs-scope angular-services

通常我写SPA并在控制器之间共享数据对于服务来说很简单。

我没有使用SPA格式(不使用ng-view),并尝试在页面之间共享数据,但在加载第二页(获取数据)时为空。

PAGE1(index.html):

<div ng-controller="CreateList">
    <input type="text" ng-model="myValue">
    <div ng-click="share(myValue)">Share</div>
</div>

PAGE2:

<div ng-controller="GeList">
    <p>{{ sharedData  }}</p>
</div>

JS:

app.controller('CreateList', function($scope, $location, $http, serviceShareData) {

    $scope.share= function (selectedValue) {

        if (selectedValue === undefined ) {
            console.log ("its undefined");
        }       
        else {
            console.log (selectedValue);

            serviceShareData.addData(selectedValue);
            window.location.href = "PAGE2.html";
        }
    }

});


app.controller('GeList', function($scope, $location, $http, serviceShareData) { 

    $scope.sharedData = serviceShareData.getData();

    console.log($scope.sharedData);

});

app.service('serviceShareData', function() {
    var myData = [];

    var addData = function(newObj) {
        myData.push(newObj);
    }

    var getData = function(){
        return myData;
    }

    return {
        addData: addData,
        getData: getData
    };
});

这是一个傻瓜:http://plnkr.co/edit/6VHJhirnHZxBpKOvqzI6?p=preview

2 个答案:

答案 0 :(得分:8)

有多种方法可以在页面之间共享数据 - 本地存储,会话存储,indexedDB,cookie,或者您甚至可以将数据作为参数传递给您:

window.location.href = 'page2.html?val=' + selectedValue;

以下是使用sessionStorage查看服务的快速示例:

app.service('serviceShareData', function($window) {
    var KEY = 'App.SelectedValue';

    var addData = function(newObj) {
        var mydata = $window.sessionStorage.getItem(KEY);
        if (mydata) {
            mydata = JSON.parse(mydata);
        } else {
            mydata = [];
        }
        mydata.push(newObj);
        $window.sessionStorage.setItem(KEY, JSON.stringify(mydata));
    };

    var getData = function(){
        var mydata = $window.sessionStorage.getItem(KEY);
        if (mydata) {
            mydata = JSON.parse(mydata);
        }
        return myData || [];
    };

    return {
        addData: addData,
        getData: getData
    };
});

Plunkr是here

答案 1 :(得分:4)

当你像这样重新加载页面时

  

window.location.href =&#34; PAGE2.html&#34 ;;

使用所有控制器,服务等再次初始化应用程序。 使用服务中的Web存储来存储数据。

不要在你的应用中使用默认的js窗口对象。如果您需要使用位置,请使用$ location服务。如果需要获取窗口属性,请使用$ window object。

使用ng-view或尝试使用ui-router。