我觉得很多人一直这样做,但我找不到类似的例子却没有成功。
我使用angularJS($http.post
)从后端获取数据到javascript文件中的控制器,并在一个html中显示它。从该html发送搜索查询后收到数据。现在,我想" export"将该数据转换为另一个JS文件,并在新的html中再次呈现一些。问题是我在搜索会话期间只能通过搜索控制器访问该数据,我可能需要以某种方式存储它或将其发送到另一个控制器/ JS文件。
不幸的是,我不能使用$ cookies。此外,如果我不必,我会尽量避免通过服务器发送新请求。
我已经阅读了一些有关角度服务的内容,但是,我是角色(和一般用户界面)的新手,并且由于某种原因无法为我的特定情况实现这一点。
以下是从html页面获取搜索请求后相关控制器的示例:
app.controller('SearchCtrl', ['$scope', '$http',
function($scope, $http) {
$scope.searchJSON = {
searchToken: [],
searchOption: []
$scope.sendSearch = function() {
//preparing JSON to send request to server
$scope.searchJSON["searchToken"] = this.search.searchToken;
$scope.searchJSON["searchOption"] = this.search.searchOption;
var json = $scope.searchJSON;
//sending and getting response (JSON object)
$http.post("http://some_host", json)
.success(function(response) {
$scope.collections = response.searchResults;
});
};
}]);

所以我感兴趣的数据传递给另一个JS文件是$scope.collections
,这是一个JSON文件(我不想为两个html页面使用相同的JS文件,所以希望从新JS文件中的新控制器调用该数据。)
将会感谢网络上的任何答案,线索或类似示例。谢谢大家!
答案 0 :(得分:0)
解决此问题的一种可能方法是在$ window上使用sessionStorage / localStorage。您可以将数据存储在那里,在重定向到另一个文件后,您可以通过调用来使用它。
答案 1 :(得分:0)
你提出服务是正确的,因为这是我亲自实现这一点的方式。创建一个服务来处理搜索请求,并通过promises存储结果:
angular.module('yourModule')
.factory('searchService', function($http, $q) {
var searchService = {
resultsPromise: null,
sendSearch: function(token, option) {
var dfd = $q.defer();
var json = {
searchToken: token,
searchOption: option
};
$http.post("http://some_host", json).then(
function(response) {
// resolve your deferred
dfd.resolve(response.data);
},
dfd.reject
);
this.resultsPromise = dfd.promise;
return dfd.promise;
}
};
return searchService;
});
然后在当前的控制器中,执行:
app.controller('SearchCtrl', ['$scope', 'searchService',
function($scope, searchService) {
$scope.searchJSON = {
searchToken: [],
searchOption: []
$scope.sendSearch = function() {
searchService.sendSearch($scope.searchJSON.searchToken, $scope.searchJSON.searchOption);
};
然后在您的其他文件中,只需查看同一服务的currentResults:
app.controller('OtherCtrl', function($scope, searchService) {
if (searchService.resultsPromise) {
searchService.resultsPromise.then(function(results) {
$scope.results = results;
});
}
});
答案 2 :(得分:0)
您可以放弃$http
服务并改用$resource
。在那里,您可以使用$cacheFactory
,如本帖所示:How to cache an http get service in angularjs
答案 3 :(得分:0)
替代解决方案是http://jmdobry.github.io/angular-cache/,它可以很好地与ngResource配合使用,也可以轻松配置为同步到localStorage,因此在页面刷新后不需要重新执行请求。
`$resource('my/kewl/url/:key', { key: '@key' }, {
'get': { method: 'GET',
cache: $angularCacheFactory('MyKewlResourceCache', {
storageMode: 'localStorage' })
}
});`