获取解决的路径参数

时间:2014-01-12 20:36:22

标签: angularjs angular-ui-router

我因为无法理解Angular-UI UI-Router而被杀死。我的状态定义如下:

$stateProvider
    .state('member', {
        url: '/member/:membersId',
        templateUrl: 'templates/member.html',
        resolve : {
            // From examples for testing
            simpleObj:  function(){
                return {value: 'simple!'};
            },

            memberDetails : function(FamilyService,$state) {

                return FamilyService.getMember($state.current.params.membersId);

            }
        },
        controller: 'MemberController'
    });

由于文档说$ stateParams不可用,我使用$ state.current.params。应该没事。相反,我得到了死气沉沉。我无法访问membersId来挽救我的生命。

为了测试我的服务并确保它不是问题,我在membersId中硬编码,控制器获得memberDetails结果以及simpleObj结果。所以,服务和控制器,工作得很好。

硬编码的示例:

$stateProvider
    .state('member', {
        url: '/member/:membersId',
        templateUrl: 'templates/member.html',
        resolve : {
            // From examples for testing
            simpleObj:  function(){
                return {value: 'simple!'};
            },

            memberDetails : function(FamilyService,$state) {

                return FamilyService.getMember('52d1ebb1de46c3f103000002');

            }
        },
        controller: 'MemberController'
    });

尽管文档说你无法使用$ stateParams,但我还是试过了。它也不起作用。

return FamilyService.getMember($stateParams.membersId);

我如何让membersId参数传递到FamilyService以获得解析?

我没有多少头发可以拔掉;所以,有人请救我。

1 个答案:

答案 0 :(得分:24)

我终于弄明白了。它在文档中非常简单。尽管多次阅读,我每次都忽略了它。我需要在解决方案中注入$ stateParams:

$stateProvider
    .state('member', {
        url: '/member/:membersId',
        templateUrl: 'templates/member.html',
        resolve : {
            simpleObj:  function(){
                return {value: 'simple!'};
            },

            memberDetails : function(FamilyService,$stateParams) {
                return FamilyService.getMember($stateParams.membersId);
            }
        },
        controller: 'MemberController'
    });

我仍然不明白为什么文档说这是不可能的。

  

两个重要的$ stateParams陷阱

     

$ stateParams对象仅在激活状态后填充   并解决所有依赖项。这意味着您将无法访问   它处于状态解决功能。请改用$ state.current.params。   $ stateProvider.state('contacts.detail',{resolve:{         someResolve:function($ state){            // *我们不能在此处使用$ stateParams,服务尚未就绪 //            // 使用$ state.current.params代替* //            return $ state.current.params.contactId +“!”         }; },// ...})