Angular - $ stateParams在控制器中为空

时间:2014-05-15 00:51:47

标签: javascript angularjs

我很难理解stateParams应该如何工作。我看到的任何地方都表示,当我前往网址item_id时,这应该会传递/#/manage/456 456,而$stateParams则是一个空对象。此外,在传递给MainCtrl的$state对象中,我可以使用$state.params访问所有参数,但这似乎是不受欢迎的,并且是hackish。

angular
    .module('router',['ui.router'])
    .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider)
    {

        $stateProvider
            .state('manage', 
            {
                url: '/manage',
                templateUrl: '/templates/main.html',
                controller: 'MainCtrl'
            })
            .state('manage.item_id',
            {
                url: '/:item_id',
                templateUrl: '/templates/main.html',
                controller: 'MainCtrl'
            })

    }])
    .controller('MainCtrl', ['$scope', '$stateParams', '$state', function($scope, $stateParams, $state)
    {
        // empty object
        console.log('$stateParams: ', $stateParams);

        // shows the variables i want
        console.log('$state.params: ', $state.params); 
    }])

1 个答案:

答案 0 :(得分:10)

您尝试做的事情应该可以正常工作,请参阅此JSFiddle:http://jsfiddle.net/ahchurch/gf7Fa/14/

<script type="text/ng-template" id="item.tpl.html">
    embeded item template
</script>

<script type="text/ng-template" id="main.tpl.html">
    <ul>
        <li><a href="#/manage/45">change route</a></li>
    </ul>
    <div ui-view></div>
</script>

<div ui-view></div>


angular.module('myApp',['ui.router'])
    .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider)
    {
        $urlRouterProvider.otherwise("/manage");
        $stateProvider
            .state('manage', 
            {
                url: '/manage',
                templateUrl: 'main.tpl.html',
                controller: 'MainCtrl'
            })
            .state('manage.item_id',
            {
                url: '/:item_id',
                templateUrl:'item.tpl.html',
                controller: 'MainCtrl'
            })
    }])
.controller('mainController', function(){})
    .controller('MainCtrl', ['$scope', '$stateParams', '$state', function($scope, $stateParams, $state)
    {
        // empty object
        console.log("main controller"); 

        console.log($stateParams);
    }]);

我注意到的一件事是你的模板对于这两种状态都是相同的文件,所以你可能只是看到&#34; manage&#34;的初始化。状态,永远不会看到&#34; manage.item_id&#34;状态。