Я только недавно начал использовать 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
что я хочу, чтобы ответ 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
. Это из-за двух разных 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, мне все равно пришлось преобразовать json, используя angular.toJson()
.
Вот сервис для сохранения данных json:
app.service('sharedProperties', function() {
return {
getData: function() {
return angular.fromJson(sessionStorage.sharedProperties);
},
setData: function(value) {
sessionStorage.sharedProperties = angular.toJson(value);
},
}
});
Так что теперь даже после перенаправления на другую страницу я могу получить доступ к данным.