4

私のAngularJSアプリには、item listビュー (基本的にはユーザーが選択できるアイテムの大きなリスト) とitem detailビューがあります。現在、次のようにルートを設定しています。

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives']).
  config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
    $routeProvider.
      when('/', {
        templateUrl: 'partials/index',
        controller: indexCtrl
      }).
      when('/itemDetail/:id', { 
        templateUrl: 'partials/itemDetail',
        controller: itemDetailCtrl
      }).
      otherwise({
        redirectTo: '/'
      });
    $locationProvider.html5Mode(true);
  }]);


function itemDetailCtrl($scope, $http, $routeParams) {
  $http.get('/api/post/' + $routeParams.id).
    success(function(data) {
      $scope.post = data.post;
    });
}

ルートについては、itemDetail/:idここに複数の :id を持つオプションが必要です (例: '/:id1+:id2+:id3')。ユーザーが 1 つ、2 つ、またはそれ以上のアイテムを選択すると、システムは機能するはずです。

私がうまくいかなかった可能性のある解決策:

  • ユーザーが複数のアイテムを選択すると、アプリはアイテムの一意idを配列に記録します
  • 詳細ビューに移動すると、ルートは、配列内のすべての から作成された文字列であり'itemDetail/STRING、それらの間に があります。例えば:STRINGid+itemDetail/item1+item2+item3
  • では、以前とitemDetailCtrl同様に、文字列を取得し、記号で分割して+新しい配列を作成します。
  • 次に、 を使用しng-repeatてそれらを取得idsし、データベースから詳細をビューに読み込みます。

これは頭​​に浮かんだ最初の解決策でしたが、非常に面倒で特に洗練されていないようです。これを達成するためのより良い方法はありますか?もしそうなら、複数のIDを反映するようにitemDetailCtrlを更新するにはどうすればよいですか?

4

1 に答える 1

0

URLは特定のアイテム用ではなく、複数のURLを持つことができるので、私はより似たURLを使用しitemDetail?item=item1&item=item2&item=item3、次に$routeParams取得する必要があります$routeParams.item = [item1, item2, item3]

于 2015-03-06T20:16:15.513 に答える