2016-08-04 4 views
1

これはAngular.jsへの私の最初の試みです。私はいくつかのJSONをロードし、リストを表示する単一のページアプリケーションを作成しようとしています。リストのリンクをクリックすると、新しいページに移動し、JSONデータのIDを使用してページをより詳細に表示する必要があります。角度:1ページのアプリケーションの2つのビュー間でデータを渡すにはどうすればよいですか?

ご協力いただきまして誠にありがとうございます。ここで

には、JavaScript(easyjet.js)です:

<!DOCTYPE html> 
<html ng-app="easyjet"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Easyjet, Flights</title> 
    </head> 
    <body> 
     <div ui-view></div> 

     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script> 
     <script src="angular-ui-router.min.js"></script> 
     <script src="easyjet.js"></script> 
    </body> 
</html> 

テンプレートファイル: 1.するlist.html

<div class="container"> 

    <!-- Filtering & Sorting --> 
    <div> 
     <input type="text" id="search" ng-model="search.$" placeholder="Search anything..." /> 
     <select ng-model="order"> 
      <option value="flightNumber.number">Flight Number (ASC)</option> 
      <option value="-flightNumber.number">Flight Number (DEC)</option> 
      <option value="localDepartureTime">Date (ASC)</option> 
      <option value="-localDepartureTime">Date (DEC)</option> 
     </select> 
    </div> 

    <!-- Result List --> 
    <div class="result" 
     ng-repeat="result in filteredResults = (resultsData | filter: search | orderBy: order)" 
     ng-style="{ 'background-color': result.id == selectedResult.id ? 'lightgray' : '' }" 
     ng-click="selectResult(result)"> 

     <span style="display:none;">{{ $index }}</span> 
     <a ng-href="#/detail/{{ result.id }}"><span>EZY {{ result.flightNumber.number }}</span></a> 
     <span>From: {{ result.departureAirport }}</span> 
     <span>To: {{ result.arrivalAirport }}</span> 
     <span>Date: {{ result.localDepartureTime | date:"longDate" }}</span> 
    </div> 

    <div ng-show="filteredResults.length == 0">No Result Found</div> 

</div> 
ここ

var app = angular.module('easyjet', ['ui.router']); 

app.config(function($stateProvider, $urlRouterProvider){ 
    $stateProvider.state('flights', { 
     url: '/', 
     templateUrl: 'templates/list.html', 
     controller: 'ResultsController' 
    }) 
    .state('details', { 
     url: '/detail/:id', 
     templateUrl: 'templates/fulldetails.html', 
     controller: 'ResultsController' 
    }); 
    $urlRouterProvider.otherwise('/'); 
}); 


app.controller('ResultsController', function($scope, $http, $stateParams) { 

    console.log($stateParams); 

    // Get JSON data 
    $http({ 
     method : "GET", 
     url : "http://ejtestbed.herokuapp.com/flights" 
    }).then(function(response) { 
     $scope.resultsData = response.data; 
    }, function(response) { 
     $scope.resultsData = response.statusText; 
     console.log("Oops! Couldn't load JSON!"); 
    }); 

    // Select and display result details 
    $scope.selectedResult = null; 

    $scope.selectResult = function (result) { 
     $scope.selectedResult = result; 
    }; 

    //Sorting default setting 
    $scope.order = "flightNumber.number"; 

}); 

は、デフォルトのHTMLページです

  1. fulldetails.html

  • フライト番号:{{selectedResult.flightNumber.carrierCode}}、{{selectedResult.flightNumber.number}}から
  • :{{selectedResult.departureAirport}}
  • に:{ {selectedResult.arrivalAirport}}
  • 出発ターミナル:{{selectedResult.depTerminalName}}
  • 出発時刻:{{selectedResult.localDepartureTime |日付: "longDate"}}
  • 到着時間:{{selectedResult.localArrivalTime |日付:
  • 席利用可能な "longDate"}}:{{}} selectedResult.seatsAvailable
  • 大人運賃:{{}} selectedResult.prices.adult.value
  • デビットカード予約料:{{selectedResult.prices .adult.valueWithDebitCard}}
  • クレジットカード予約料:{{selectedResult.prices.adult.valueWithCreditCard}}
  • 子供運賃:{{selectedResult.prices.child.value}}
  • デビットカード予約料: {{selectedResult.prices.child.ValueWithDebitCard}}
  • クレジットカード予約手数料:{{selectedResult.prices.child.ValueWithCreditCard}}
+4

[Angular JSのコントローラ間でデータを渡すのは可能ですか?](http://stackoverflow.com/questions/20181323/passing-data-between-controllers-in-angular-js) – Manish

+1

私はそうは思わない彼は同じコントローラを使用していて、コントローラではなく2つの異なるビュー間でデータを共有したいと考えています。私は間違いない@Nasir –

+0

@Manish:サービスを使うことは良いアプローチのようです。 – Nasir

答えて

3

コールを行い、ページ間にデータを保存するサービスを使用する必要があります。

コントローラーがこのサービスを呼び出して、データを取得したり、更新を依頼したりします。

0

同じコントローラを使用している場合は、サービスを使用して同じコントローラを使用すると、サービスが再ロードされ、同じコントローラを使用していない場合は、ベストプラクティスとしてサービスを使用する必要があります。

キャッシュの操作方法は?ただキャッシュに

yourCache.put(key, value); 

し、それを

yourCache.remove('key'); 
0

を除去するためにあなたが使用することができますを保存し、成功した後、あなたの関数で

var yourCache = $cacheFactory.get('yourCache') || $cacheFactory('searchCache'); 

をロードし、コントローラ上のコントローラ

チェックで使用する$ CacheFactoryのサービスをvariableと2つ以上共有する角度サービスcontrollers

しかし、ここでは同じコントローラを持つビューの値を共有することが問題です。

ここで、ビューを変更するときは、controllerをリロードします。したがって、その値をローカルストレージまたはセッションストレージに保存する必要があります(サービスを設定することはできますが、より良いオプションはlocalStorageまたはsessionStorageです)。

この場合、$localStorageまたは$sessionStorageの依存関係を使用できます。

+0

OK良いアプローチは私にそれを行くことができます – Nasir

関連する問題