次の状態を設定しています。
var questions = {
name: 'questions',
url: '/questions',
views: {
'menu': {
templateUrl: function (stateParams) {
return '/Content/app/questions/partials/menu.html'
},
controller: 'QuestionsMenuController'
},
}
}
var questionsContent = {
name: 'questions.content',
parent: 'questions',
url: '/:content',
views: {
'content@': {
templateUrl: function (stateParams) {
var isNumber = !isNaN(parseFloat(stateParams.content));
return isNumber ? '/Content/app/questions/partials/detail.html' :
'/Content/app/questions/partials/content.html'
},
controller: 'QuestionsContentController'
},
}
}
と:
$stateProvider
.state(questions)
.state(questionsContent);
/questions でメニューに移動すると、コントローラーは質問のリストを取得し、$scope.questionHeaders オブジェクトに入力します。
var url = '/api/Question/GetQuestionHeaders?id=0';
$http.get(url)
.success(function (data, status, headers, config) {
$scope.questionHeaders = data;
$scope.currentQuestion = $scope.questionHeaders[0].questionId;
$state.transitionTo('questions.content', { content: $scope.currentQuestion })
})
.error(function (data, status, headers, config) {
alert("Error: No data returned from " + url);
});
これに続いて、リストの最初に移行したいので、次のようにコーディングしました。
$state.transitionTo('questions.content', { content: $scope.currentQuestion })
ただし、これをトレースすると、無限ループに留まり、新しい /questions/5 に移動しません (5 が questionHeaders[0].questionId の場合)。
/questions/5 に移行する方法について誰かアドバイスをいただけますか? それが新しいブラウザのhrefに送られれば嬉しいですが、それを直接(どのように)コーディングする必要がありますか、それともui-routerでこれを行うことができますか?