Angular UI路由器 - 从其他状态访问stateParams

时间:2014-06-11 12:51:27

标签: javascript angularjs angular-ui

我是Angular的初学者,我很抱歉我的英语不好。我找到了类似的问题和答案,但它对我的代码没有帮助......我想要这样的东西

.state('members.detail', {
            parent: "members",
            url: "/:id",
            templateUrl: "templates/members.detail.html",
            controller: 'membersDetailsController'
        })

.state('members.detail.fees', {
                parent: 'members.detail',
                url: '/fees',
                views: {
                  'items': {
                    templateUrl: 'templates/tabs/tab2-fees.html',
                    controller: 'Fees'
                  }
                }
        })

我也有这样的事情:

myapp.controller('membersDetailsController', function($scope, $http, $stateParams) {alert($stateParams.id);}

<a ui-sref=".fees" ng-class="{ active: $state.includes('members.detail.fees') }">Fees</a>

我需要第一个状态的id才能在第二个状态/费用控制器中使用

P.S。关于这一点有类似的问题,但对我没有帮助(或者不太了解)Angular ui-router - how to access parameters in nested, named view, passed from the parent template?

2 个答案:

答案 0 :(得分:4)

您无法直接在模板中访问$state$stateParams,您需要将其绑定到范围:

myapp.controller('Fees', function($scope, $http, $stateParams, $state) { $scope.params = $stateParams; $scope.currentState = $state; };

<a ui-sref=".fees" ng-class="{ active: params.id === someId }">Fees</a>

请注意,ui-router还支持ui-sref-active指令,您可以根据活动状态突出显示元素。

另请注意,嵌套路由会从父项继承状态参数。

答案 1 :(得分:0)

嗯,您可以完全按照从所有子控制器中编写的方式访问它。 像这样:

myapp.controller('Fees', function($scope, $http, $stateParams) {alert($stateParams.id);}

但是你的“ui-sref”属性有误。 它应该是这样的:

<a ui-sref="members.detail.fees({ id:1 })" ng-class="{ active: $state.includes('members.detail.fees') }">Fees</a>

希望这会有所帮助。