最近のプロジェクトの 1 つで、このソリューションにたどり着きました。これにより、ニーズをすぐに解決することができました。ユースケースに合わせて改善するのを手伝ってくれると面白いでしょう。
1.ルート定義を config に移動します。
...
ROUTES: {
PAGE1: '/page1/:id',
PAGE2: '/page2/:id/:name'
},
...
2. config の値を使用して、ルートを定義します。
app.config(['$routeProvider', 'config', function ($routeProvider, config) {
$routeProvider.when('/', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when(config.ROUTES.PAGE1, {
templateUrl: 'partials/page1.html',
controller: 'PageOneCtrl'
});
...
$routeProvider.otherwise({
redirectTo: '/'
});
}]);
3. URL を作成する機能を提供するサービスをセットアップします。
services.factory('routes', function (config) {
// populates `:param` placeholder in string with hash value
var parseString = function (string, parameters) {
if (!string) return '';
if (!parameters) return string;
for (var index in parameters) {
if (!parameters.hasOwnProperty(index)) continue;
string = string.replace(':' + index, parameters[index]);
}
return string;
};
return {
getPage1Link: function (urlParams) {
return '#' + parseString(config.ROUTES.PAGE1, urlParams);
}
};
});
== 欠点 ==
このアプローチでは、ルートごとにゲッターを定義する必要がありました (5 つ未満であり、開発速度が重要でした)。