使用angularJS

时间:2016-01-28 17:45:48

标签: javascript jquery html angularjs frontend

我觉得很多人一直这样做,但我找不到类似的例子却没有成功。

我使用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文件中的新控制器调用该数据。)

将会感谢网络上的任何答案,线索或类似示例。谢谢大家!

4 个答案:

答案 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' })
     }
 });`