在 AngularJS 中的页面之间共享数据返回空
Sharing Data between pages in AngularJS returning empty
通常我编写 SPA 并且通过服务在控制器之间共享数据很简单。
我没有使用 SPA 格式(不使用 ng-view),并尝试在页面之间共享数据,但在加载第二页(获取数据)时它是空的。
第 1 页 (index.html):
<div ng-controller="CreateList">
<input type="text" ng-model="myValue">
<div ng-click="share(myValue)">Share</div>
</div>
第 2 页:
<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
};
});
这是一个 plunkr:http://plnkr.co/edit/6VHJhirnHZxBpKOvqzI6?p=preview
当您像这样重新加载页面时
window.location.href = "PAGE2.html";
应用程序使用所有控制器、服务等再次初始化。
在您的服务中使用网络存储来存储数据。
不要在您的应用中使用默认的 js window 对象。如果您需要使用位置,请使用 $location 服务。如果需要获取 window 属性,请使用 $window 对象。
使用 ng-view 或尝试 ui-router。
有多种方法可以在页面之间共享数据 - 本地存储、会话存储、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。
通常我编写 SPA 并且通过服务在控制器之间共享数据很简单。
我没有使用 SPA 格式(不使用 ng-view),并尝试在页面之间共享数据,但在加载第二页(获取数据)时它是空的。
第 1 页 (index.html):
<div ng-controller="CreateList">
<input type="text" ng-model="myValue">
<div ng-click="share(myValue)">Share</div>
</div>
第 2 页:
<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
};
});
这是一个 plunkr:http://plnkr.co/edit/6VHJhirnHZxBpKOvqzI6?p=preview
当您像这样重新加载页面时
window.location.href = "PAGE2.html";
应用程序使用所有控制器、服务等再次初始化。 在您的服务中使用网络存储来存储数据。
不要在您的应用中使用默认的 js window 对象。如果您需要使用位置,请使用 $location 服务。如果需要获取 window 属性,请使用 $window 对象。
使用 ng-view 或尝试 ui-router。
有多种方法可以在页面之间共享数据 - 本地存储、会话存储、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。