获取解决的路径参数

Jus*_*oel 19 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'
    });
Run Code Online (Sandbox Code Playgroud)

由于文档说$ 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'
    });
Run Code Online (Sandbox Code Playgroud)

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

return FamilyService.getMember($stateParams.membersId);

我是如何让这个membersId参数传递到FamilyService以获得解决方案的呢?

拉出来的头发不多; 所以,请有人救我.

Jus*_*oel 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'
    });
Run Code Online (Sandbox Code Playgroud)

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

两个重要的$ stateParams陷阱

仅在激活状态并解析所有依赖项后才填充$ stateParams对象.这意味着您将无法在状态解析功能中访问它.请改用$ state.current.params.$ stateProvider.state('contacts.detail',{resolve:{someResolve:function($ state){// *我们不能在这里使用$ stateParams,服务还没准备好// //使用$ state.current.params代替* // return $ state.current.params.contactId +"!" }; },// ...})