Как я могу заставить мой ui-маршрутизатор перейти в другое состояние от моего контроллера?

У меня установлены следующие состояния:

    var questions = {
        name: 'questions',
        url: '/questions',
        views: {
            'menu': {
                templateUrl: function (stateParams) {
                    return '/Content/app/info/partials/menu.html'
                },
                controller: 'QuestionsMenuController'

            },
        }
    }
    var questionsContent = {
        name: 'questions.content',
        parent: 'questions',
        url: '/:content',
        views: {
            '[email protected]': {
                templateUrl: function (stateParams) {
                    var isNumber = !isNaN(parseFloat(stateParams.content));
                    return isNumber ? '/Content/app/info/partials/detail.html' :
                                      '/Content/app/info/partials/content.html'
                },
                controller: 'QuestionsContentController'
            },

        }
    }

и

    $stateProvider
        .state(questions)
        .state(questionsContent);

Когда я отправляю свое меню с/вопросами, тогда контроллер получает список вопросов и заполняет объект $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 })

Однако, когда я прослеживаю это, он просто остается в петле infinte, и он не переходит к новому /info/ 5 (когда 5 является вопросомHeaders [0].questionId).

Может кто-нибудь дать мне несколько советов относительно того, как я могу сделать это переход на /info/ 5? Я рад, если он пойдет в новый браузер href, но мне нужно закодировать это напрямую (как) или может ли ui-router сделать это для меня?

Ответ 1

Вы можете ввести службу $state и вызвать метод transitionTo (go).

.controller('SomeController', ['$state', function($state){
    $state.transitionTo('my.state', {arg:'arg'});
}]);

@Вопрос:

Вы также можете ввести $stateParams в свой контроллер и перейти к состоянию с args:

.controller('SomeController', ['$state', '$stateParams', function($state, $stateParams){
        $state.go('my.state', {listId: $stateParams.listId, itemId: $stateParams.itemId});
    }]);