8

AngularJS で定義されたルートで独自の変数を渡すことは可能ですか?

私がこれを行っている理由は、同じページのデータ表現 (1 つは JSON データに関してフィルター処理されたビュー) を作成する必要があり、$params 配列にブール値のフラグを指定して、コントローラー関数は、このページがフィルター処理されているか、フィルター処理されていないかを認識しています。

このようなもの:

var Ctrl = function($scope, $params) {
  if($params.filtered) {
    //make sure that the ID is there and use a different URL for the JSON data
  }
  else {
    //use the URL for JSON data that fetches all the data
  }
};

Ctrl.$inject = ['$scope', '$routeParams'];

angular.modlule('App', []).config(['$routeProvider', function($routes) {

  $routes.when('/full/page',{
    templateURL : 'page.html',
    controller : Ctrl
  });

  $routes.when('/full/page/with/:id',{
    templateURL : 'page.html',
    controller : Ctrl,
    params : {
      filtered : true
    }
  });

}]);
4

4 に答える 4

21

$routeProviderドキュメントによると、のrouteパラメータに$routeProvider.when()はプロパティがありますresolve:

コントローラーに注入する必要がある依存関係のオプションのマップ。

このようなものが動作するはずです:

function Ctrl($scope, isFiltered) {
  if(isFiltered) {
    //make sure that the ID is there and use a different URL for the JSON data
  }
  else {
    //use the URL for JSON data that fetches all the data
  }
}
Ctrl.$inject = ['$scope', 'isFiltered'];

angular.modlule('App', []).config(['$routeProvider', function($routeProvider) {

  $routeProvider.when('/full/page',{
    templateURL: 'page.html',
    controller: Ctrl
  });

  $routeProvider.when('/full/page/with/:id',{
    templateURL: 'page.html',
    controller: Ctrl,
    resolve: {
      isFiltered: function() { return true; }
    }
  });

}]);
于 2012-08-22T06:04:26.090 に答える
1

私の知る限り、現在、ルートに追加のパラメーターを指定することはできません。そうは言っても、 :id が$routeParamsの一部として定義されているかどうかをテストすることで、ユースケースを簡単にカバーできます。

問題は、AngularJS が '/full/page' または '/full/page/with/:id' のいずれかでルートと一致するため、コントローラーで ID の存在について $routeParams をテストするだけです:

if ($routeParams.id)

あなたはどちらの場合であるかを知るでしょう。

別の方法は、ルートごとに異なるコントローラーを使用することです。

于 2012-08-21T20:57:38.290 に答える
0

から直接スニーク パラメータを取得できます$route.current.$$route

function Ctrl($scope, $route) {
  var filtered = $route.current.$$route.params.filtered;
}

angular.modlule('App', []).config(['$routeProvider', function($routeProvider) {

  $routeProvider.when('/full/page/with/:id',{
    templateURL: 'page.html',
    controller: Ctrl,
    params : {
      filtered : true
    }
  });

}]);

それはうまくいきますが、私はまだresolve解決策を望んでいます。params(または選択した任意の名前) は、将来のリリースで angularjs によって上書きされる可能性があります。

于 2014-08-01T14:10:20.573 に答える