14

次の状態を設定しています。

    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でこれを行うことができますか?

4

1 に答える 1