2016-06-15 11 views
1

私はリストのテーブル(別名商品)を含むページを持っています。 編集リストボタンを各行に追加する必要があります。このボタンをクリックすると、1つのリスト(商品)を編集できる新しいページに移動します。テーブル行からアイテムへの角度ルーティング

So:Listings>リストを編集

HTMLはテンプレートです。私のSPAのコンテンツエリアにあるHTMLスニペットです。 (私のページが正しいコントローラにリンクされていることを確認する必要があるため、これを言及します。スニペット/テンプレートにはng-controller =がありません)。

とにかく、これは私です編集リストにルートの掲載を行うしようとしている:

listings.html:

<table class="table table-striped table-bordered table-hover table-checkable order-column" 
      id="listings-table" 
      datatable="ng" 
      dt-options="listingVm.dtOptions" 
      dt-column-defs="listingVm.dtColumnDefs"> 
     <tr ng-repeat="listing in listingVm.listings"> 
      <td>{{ listing.Title }}</td> 
      <td>{{ listing.Description }}</td> 
    <!-- my addition: --> 
      <td><a ng-click="listingVm.editListing(listing.Id)"><i class="fa fa-edit"></i></a></td> 
     </tr> 
    </table> 

listingsController.js:

vm.editListing = function (listingId) { 
    // I'll figure out how to get the data later 
    //$http.get('/api/Listing/').then(function (response) { 
    // console.log(response); 
    $location.path('/editlisting/' + listingId); 
    //}, function (response) { 
    //}); 

    } 

router.js:

  .state('layout.listing', { 
       url: '/listing', 
       templateUrl: '/Content/js/apps/store/views/listing.html', 
       controller: 'listingController', 
       controllerAs: 'listingVm', 
       data: { pageTitle: 'Listings' } 
      }) 
    // I added this: 
      .state('layout.editlisting', { 
       url: '/editlisting/:id', 
       templateUrl: '/Content/js/apps/store/views/edit_listing.html', 
       controller: 'editListingController', 
       controllerAs: 'listingVm', 
       data: { pageTitle: 'Edit Listing' } 
      }) 

私はええと...私がこだわっています。私はこれがどのように機能すべきかわからない。

これはです。は、デフォルトのダッシュボードページ:/#/ダッシュボードにすぐにリダイレクトされます。これは、その名前でページが見つからなかった場合に実行すると思われます。 (でエラーなし、デフォルトへの再ルーティングのみ)

ルーティングの2つの方法のマングリングを使用しているようですね。

例えば、ルータに状態がある場合は、次のようにしてください:

<a ui-sref="layout.editlisting"> 
+0

トライ$のlocation.url(「/ editlisting /」+ listingIdを)。 – gyc

+0

Thx。結局のところ私の問題はルータではなかったようだが、それはその道にある。 – DaveC426913

+0

別の簡単な質問:editListingページにあるリストIDを取得するにはどうすればよいですか?私はそれをURLクエリーストリングから引き出しますか? – DaveC426913

答えて

0

これはコメントではなくクリーンな回答にしましょう。

$location.pathは、パラメータなしのURLを送信します。

$location.url('/editlisting/' + listingId); 

インテントとして動作します。あなたが最初のリクエストから名前付きパラメータが含まれている$ stateParamsを注入する必要が受信コントローラ内のパラメータを取得するために

.controller('YourCtrl', ['$stateParams', function($stateParams) { 
    this.listingId = $stateParams.listingId; 
} 
+0

ありがとうございます。 ** $ stateParams **は答えです。私は$ route以上の気をつけていた。 – DaveC426913

関連する問題