0

Angularアプリでルートを設定するだけです。最初のビューは、Listプレゼンテーションのリストを取得するためにhttp呼び出しを行います

function ListController($scope, $http)
{
    $scope.error            = null;
    $scope.presentations    = null;
    $scope.requesting       = true;
    $scope.currentTitle     = '-1';
    $data = {
        'type' : 'presentations'
    };

    $http.post('resources/request.php', $data, {timeout:20000})
        .success(function(data, status, headers, config)
        {
            $scope.requesting   = false;
            $scope.presentations    = data;
        })
        .error(function(data, status, headers, config)
        {
            $scope.requesting   = false;
            log(status + ', data:" ' + data + '"');
        }
      }
    );
}

私のルートは

angular.module('main',[]).
  config(function($routeProvider) {
    $routeProvider.
      when('/', {controller:ListController, templateUrl:'resources/views/list.html'}).
      when('/view/:id', {controller:VforumController, templateUrl:'resources/views/vforum.html'}).
      otherwise({redirectTo:'/'});
  });

私が抱えている問題は、電話に出てから電話に#/view/:id戻ると、再び呼び出されることです。アプリに初めてアクセスするときにのみ読み込まれ、最初に読み込まれたのと同じデータを参照するようにするにはどうすればよいですか?/$http

角度の外側で変数を作成し、それを最初にロードされたデータと等しく設定しようとしました。それから、ListController基本的にはしましたif data is null, do the $http call else set $scope.data = dataが、それはうまくいきませんでした。リストビューは空白でした。$scope.data私のリストを構築するものです。

4

1 に答える 1

4

必要なのはサービスです。これは角度でシングルトンです。

.factory( 'myDataService', function ( $http ) {
  var promise;

  return function ( $data ) {
    if ( ! angular.isDefined( promise ) ) {
      promise = $http.post('resources/request.php', $data, {timeout:20000});
    }

    return promise;
  }
});

そして今、あなたは単に$httpあなたのサービスへの呼び出しに置き換えることができます:

function ListController( $scope, myDataService )
{
  // ...

  myDataService( $data ).then( function success( response ) {
    $scope.requesting = false;
    $scope.presentations = response.data;
  }, function error( response ) {
    $scope.requesting = false;
    log(status + ', data:" ' + response.data + '"');
  });
}
于 2013-03-22T22:26:13.710 に答える