わかりましたので、これをテストしましたが、私の場合はうまくいきます。状態がパラメーターのみの場合は失敗しますが、各状態にパラメーター化されていないビットがある限り、ui-router は子状態まで解析できます。この事例が実演または説明されているのを見たことがありません。ほとんどのチュートリアルでは、単純なハードコーディングされたネストされた状態のみを扱い、パラメーター化された状態は扱いません。
理想的ではありませんが、機能します。
これが、この問題に直面している他の誰かに役立つことを願っています。:)
var app = angular.module('app', ['ui.router'])
.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function ( $stateProvider, $urlRouterProvider, $locationProvider) {
$urlRouterProvider.otherwise("/");
$locationProvider.html5Mode(true);
var semester = {
name: "semester",
abstract: true,
url: "semester/:sem",
templateUrl: "http://localhost:81/route/to/semtemplate.tpl.html",
controller: "semesterController"
},
program = {
name: "program",
parent: sem,
url: "program/:prg",
templateUrl: "http://localhost:81/route/to/prgtemplate.tpl.html",
controller: "programController"
},
classes = {
name: "classes",
parent: prg,
url: "/classes",
templateUrl: "http://localhost:81/route/to/clstemplate.tpl.html",
controller: "classesController"
};
$stateProvider.state(sem)
.state(prg)
.state(classes);
}]);
app.controller('paraController', ['$scope', '$stateParams', '$state',function($scope, $state, $stateParams){
console.log('paraController instantiated');
$scope.sem = $stateParams.params.sem;
$scope.prg = $stateParams.params.prg;
}]);
これは階層的な REST API であるため、このパターンは完全に機能し、各コントローラーからのスコープ継承も利用する場合、私のプロジェクトに適しているはずです。ネストされた状態の極端なテストは行っていませんが、さらにパラメーター化された状態でどのように動作するかを見るのは興味深いでしょう。私が見つけた唯一の制限は、各状態にパラメーター化されていない部分も必要であるということです。だから/:sem
失敗しますが、semester/:sem
うまくいきます。
URL が長くなるため理想的ではありませんが、実行可能な代替手段は見つかりませんでした。