現在のURLからデータを抽出し、コントローラーで使用したい。たとえば、私はこのURLを持っています:
app.dev/backend/surveys/2
私が抽出したいビット:
app.dev/backend/ :type/:id
Angularには、このタスクに役立つ何かがありますか?
ngRoute
を使用してURLからパラメーターを取得するには。つまり、アプリケーションに angular-route.js を依存関係として含める必要があります。公式の ngRouteドキュメント でこれを行う方法の詳細。
質問の解決策:
// You need to add 'ngRoute' as a dependency in your app
angular.module('ngApp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
// configure the routing rules here
$routeProvider.when('/backend/:type/:id', {
controller: 'PagesCtrl'
});
// enable HTML5mode to disable hashbang urls
$locationProvider.html5Mode(true);
})
.controller('PagesCtrl', function ($routeParams) {
console.log($routeParams.id, $routeParams.type);
});
$locationProvider.html5Mode(true);
を有効にしない場合。 URLはhashbang(/#/
)を使用します。
ルーティングの詳細については、公式のangular $ route API documentation をご覧ください。
サイドノート:この質問はng-Routeを使用してこれを達成する方法に答えていますが、使用することをお勧めします ui-Router ルーティング用。より柔軟で、より多くの機能を提供し、ドキュメントは素晴らしく、Angularに最適なルーティングライブラリと見なされます。
$routeParams
をコントローラーに挿入し、ルートが解決されたときに使用されたすべてのパラメーターにアクセスできます。
例えば。:
// route was: app.dev/backend/:type/:id
function MyCtrl($scope, $routeParams, $log) {
// use the params
$log.info($routeParams.type, $routeParams.id);
};
詳細については、 angular $ routeParams documentation を参照してください。
より良いのようなURLを生成しているだろう
app.dev/backend?type=surveys&id=2
そして使用する
var type=$location.search().type;
var id=$location.search().id;
コントローラに$ locationを挿入します。
ルート構成では、通常、次のようなルートを定義します。
.when('somewhere/:param1/:param2')
その後、$route.current.params
を使用して解決オブジェクトでルートを取得するか、$routeParams
コントローラーでルートを取得できます。いずれの場合も、ルートのマッピングを使用してパラメーターが抽出されるため、コントローラーのparam1
から$routeParams.param1
にアクセスできます。
編集:また、マッピングは正確でなければならないことに注意してください
/some/folder/:param1
単一のパラメーターのみに一致します。
/some/folder/:param1/:param2
2つのパラメーターのみに一致します
これは、ほとんどの動的サーバー側ルートとは少し異なります。たとえば、X個のパラメーターを持つ単一のルートのみを提供できるNodeJS(Express)ルートマッピング。
例:url /:id
var sample= app.controller('sample', function ($scope, $routeParams) {
$scope.init = function () {
var qa_id = $routeParams.qa_id;
}
});
RouteParamsサービスを挿入するだけです: