如何让我的ui-router与我的控制器进入不同的状态?

13 angularjs

我设置了以下状态:

    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'
            },

        }
    }
Run Code Online (Sandbox Code Playgroud)

和:

    $stateProvider
        .state(questions)
        .state(questionsContent);
Run Code Online (Sandbox Code Playgroud)

当我带有/问题的菜单时,控制器会获得一个问题列表并填充$ 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);
            });
Run Code Online (Sandbox Code Playgroud)

在此之后我想转换到列表中的第一个,所以我编码:

$state.transitionTo('questions.content', { content: $scope.currentQuestion })
Run Code Online (Sandbox Code Playgroud)

然而,当我追踪它时,它只是停留在infinte循环中,它不会转到new/questions/5(当5是questionHeaders [0] .questionId时).

有人可以给我一些建议,让我如何过渡到/ questions/5?我很高兴,如果它进入新的浏览器href但我需要直接编码(如何)或ui-router可以为我做这个?

Nik*_*hev 35

您可以注入$ state服务,并将其命名为transitionTo(go)方法.

.controller('SomeController', ['$state', function($state){
    $state.transitionTo('my.state', {arg:'arg'});
}]);
Run Code Online (Sandbox Code Playgroud)

@Cody的问题:

您还可以将$ stateParams注入控制器并转到带有args的状态:

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

  • 没有!这是解决问题的最糟糕方式.创建ui-router的全部原因是为了避免使用位置.试试这个:https://gist.github.com/anonymous/0274471008ab674bd685 (2认同)