将 JSON 响应重定向到另一个 html 页面 (Angular)
Redirect the JSON response to another html page (Angular)
我最近才开始使用 Angular,我正在尝试将 http.get 的响应重定向到另一个 html 页面,即 result.html
。我使用服务来共享数据:
这是我的控制器代码:
app.controller("controller", function($scope, $http, $window, sharedProperties){
$scope.generate = function(){
$http.get('repositories', {params: { username : $scope.username }}).
then(function mySucces(response) {
$scope.error = "";
sharedProperties.setData(response.data);
$window.location.href = '/result.html';
}, function myError() {
$scope.error = "Wrong Username";
});
}
});
app.controller("resultController", function($scope, $window,sharedProperties){
$scope.names = sharedProperties.getData();
$scope.home = function() {
$window.location.href = '/index.html';
}
});
这里是 services.js
代码:
app.service('sharedProperties', function() {
var data;
return {
getData: function() {
return data;
},
setData: function(value) {
data = value;
},
}
});
这是index.html
正文:
<div ng-app="App" ng-controller="controller">
<p>
<input type="text" ng-model="username" placeholder="Enter username here" required>
<button ng-click="generate()">Generate</button>
</p>
{{ error }}
</div>
这是我希望回复的 result.html
:
<div ng-app="App" ng-controller="resultController">
<p><button ng-click="home()">Home</button></p>
<ul>
<li ng-repeat="x in names">
{{ "Name: " + x.name + ", Languages: " + x.languages }}
</li>
</ul>
</div>
controller
通过sharedProperties
设置响应数据,因此resultController
可以使用它,但是页面重定向到result.html
后结果没有显示。
更新
两个控制器之间似乎没有共享数据,console.log
显示undefined
。是因为 2 个不同的 html 文件吗?还是因为redirect
?
更新 2
我意识到重定向会重置所有数据,所以我使用 sessionStorate
作为服务:
app.service('sharedProperties', function() {
return {
getData: function() {
return sessionStorage.sharedProperties;
},
setData: function(value) {
sessionStorage.sharedProperties = value;
},
}
});
但是 console.log
显示的不是 json 的值,而是显示:
"[object Object],[object Object],[object Object],[object Object],[object Object]"
实际值假设为:
[{"name":"git-consortium","languages":"No Language Reported"},{"name":"hello-worId","languages":"No Language Reported"},{"name":"Hello-World","languages":"No Language Reported"},{"name":"octocat.github.io","languages":"CSS JavaScript HTML "},{"name":"Spoon-Knife","languages":"CSS HTML "}]
对此有什么想法吗?
即使我得到的响应是 json,我仍然必须使用 angular.toJson()
.
转换为 json
这是保存 json 数据的服务:
app.service('sharedProperties', function() {
return {
getData: function() {
return angular.fromJson(sessionStorage.sharedProperties);
},
setData: function(value) {
sessionStorage.sharedProperties = angular.toJson(value);
},
}
});
所以现在即使在重定向到另一个页面后,我仍然可以访问数据。
我最近才开始使用 Angular,我正在尝试将 http.get 的响应重定向到另一个 html 页面,即 result.html
。我使用服务来共享数据:
这是我的控制器代码:
app.controller("controller", function($scope, $http, $window, sharedProperties){
$scope.generate = function(){
$http.get('repositories', {params: { username : $scope.username }}).
then(function mySucces(response) {
$scope.error = "";
sharedProperties.setData(response.data);
$window.location.href = '/result.html';
}, function myError() {
$scope.error = "Wrong Username";
});
}
});
app.controller("resultController", function($scope, $window,sharedProperties){
$scope.names = sharedProperties.getData();
$scope.home = function() {
$window.location.href = '/index.html';
}
});
这里是 services.js
代码:
app.service('sharedProperties', function() {
var data;
return {
getData: function() {
return data;
},
setData: function(value) {
data = value;
},
}
});
这是index.html
正文:
<div ng-app="App" ng-controller="controller">
<p>
<input type="text" ng-model="username" placeholder="Enter username here" required>
<button ng-click="generate()">Generate</button>
</p>
{{ error }}
</div>
这是我希望回复的 result.html
:
<div ng-app="App" ng-controller="resultController">
<p><button ng-click="home()">Home</button></p>
<ul>
<li ng-repeat="x in names">
{{ "Name: " + x.name + ", Languages: " + x.languages }}
</li>
</ul>
</div>
controller
通过sharedProperties
设置响应数据,因此resultController
可以使用它,但是页面重定向到result.html
后结果没有显示。
更新
两个控制器之间似乎没有共享数据,console.log
显示undefined
。是因为 2 个不同的 html 文件吗?还是因为redirect
?
更新 2
我意识到重定向会重置所有数据,所以我使用 sessionStorate
作为服务:
app.service('sharedProperties', function() {
return {
getData: function() {
return sessionStorage.sharedProperties;
},
setData: function(value) {
sessionStorage.sharedProperties = value;
},
}
});
但是 console.log
显示的不是 json 的值,而是显示:
"[object Object],[object Object],[object Object],[object Object],[object Object]"
实际值假设为:
[{"name":"git-consortium","languages":"No Language Reported"},{"name":"hello-worId","languages":"No Language Reported"},{"name":"Hello-World","languages":"No Language Reported"},{"name":"octocat.github.io","languages":"CSS JavaScript HTML "},{"name":"Spoon-Knife","languages":"CSS HTML "}]
对此有什么想法吗?
即使我得到的响应是 json,我仍然必须使用 angular.toJson()
.
这是保存 json 数据的服务:
app.service('sharedProperties', function() {
return {
getData: function() {
return angular.fromJson(sessionStorage.sharedProperties);
},
setData: function(value) {
sessionStorage.sharedProperties = angular.toJson(value);
},
}
});
所以现在即使在重定向到另一个页面后,我仍然可以访问数据。