2016-04-13 7 views
0

のページには という写真のリストが含まれており、ユーザーはそれらの写真をクリックして見ることができます。コントローラを再ロードせずに経路を更新する

私はちょうど私は、ユーザーが、選択した カードで写真をページを共有することができるようにURLを生成したいと私はすでに車が をロードしているため、ページを再読み込みデフォルト

によって開か選択した写真は必要ありませんユーザーがサムネイルをクリックしたときにのみ、選択した写真の詳細を取得するようにサービスに電話したい。

私の説明が問題の理解に役立つことを望みます。これは私のコードです

function CarsController($scope, $routeParams, $location, CarsFactory, PhotosFactory) { 

    CarsFactory.get({id: $routeParams.id}).$promise.then(function(car) { 
     console.log(car); 
    }); 

    PhotosFactory.query({carId: car.id}).$promise.then(function(photos) { 

     /* 
      List all the photos with carId = car.id 
      and the user can click to see a specific image ($scope.selectPhoto) 
     */ 
    }); 

    $scope.selectPhoto = function(photoId) { 

     /* 
      clicking on any photo should update 
      the URL to /cars/{car.id}/{photoId} 
      I tried with $location.search('photoId', photoId); but it adds a querystring, not a URL segment change. 
     */ 
    } 

    if ($routeParams.photoId) { 
     PhotosFactory.get({id: $routeParams.photoId}).$promise.then(function(photo) { 
      console.log('Default photo: ' + photo); 
     }); 
    } 
} 

ありがとうございます。

答えて

0

あなたのページにリンクを生成することが容易に、かつ画像がクリックされたときに、それが表示されることがあります

<img ng-click="showDiv = !showDiv" src="..." /> 

<div ng-show="showDiv" > 
    <a href="/url_part1/{value1}/url_part2/{value2}">link</a> 
</div> 
+0

コントローラをリロードするので、コントローラをリロードする必要はありません。それはまさに私が避けたいものです(URLの更新は単にパーマリンクを生成することです) – handsome

+0

更新された回答を参照してください –

0

URLパス(または「セグメント」)を変更するには$location.path('/cars/'+car.id+'/'+photoId).replace()を使用することができます。

ngRouteでルーティングを処理すると、Angularはロケーションの変更を傍受し、ページのリロードを防止する必要があります。ルートパラメータは"/cars/:carId/:photoId?"と一致し、 "?"最終的なパラメータをオプションにします。 .replace()のおかげで、ユーザーはすべての写真をクリックする必要はありません。

+0

これは私の望むものとまったく同じですが、うまくいきません。それはページをリロードする(私はネットワークタブのxhrコールとページ内のテキストフィールドに入力されたテキストが見当たらないのでそれを見る)私のルートは "/ cars /:carId/:photoId? " – handsome

関連する問題