我有一个带有大量状态的ui路由器应用程序,我需要能够通过$ stateParams传递模型。在每个$ http请求上,我都会在响应中检查“STATE”参数,该参数是从服务器返回的。如果存在,我执行$state.go(STATE)

如此有效,我有了$stateProvider:

$stateProvider
    .state('Account', {url: '/Account', template: '<ui-view/>'})
    .state('Account.name', {
        url: '/Name',
        templateUrl: 'app/Account/partials/Name.html',
        controller: 'AccountNameController as nameVm'
    })

还有更多看起来像这样的州。

我有一个数据模型,它只是一个带有通过函数获取和设置对象的工厂。因此,每当我调用saveAccount()时,它都会采用该模型并将其发送到Web API后端。后端验证数据并使用STATE参数(account.invalidaccount.validaccount.needsMoreInfo)将其发送回去。这是我的$ httpInterceptor
.factory('httpInterceptor', ['$q', '$injector',
        function ($q,$injector) {
            return {
                'response': function(response) {
                    if(response.data.state){
                        $injector.get('$state').go(response.data.state, response.data.account);
                    }
                    return response;
                }
            };
        }
    ])

如您所见,我正在尝试通过stateparams发送帐户。

在 Controller 中,我基本上需要能够说出vm.account = $stateParams.account
我的问题是:

如何修改$ states以使其既具有命名 Controller ,又采用状态参数并从 Controller 访问该参数?

我没有通过服务传递数据的原因是因为有多个模型,所以我不能只在$ httpInterceptor中提供服务的名称,因为它不是恒定的。

编辑:想通了

这是我的 Controller 需要包含的内容:
如果($ stateParams && $ stateParams.data){
vm.Account = $ stateParams.data;
}

这就是该州最终的样子:
.state('taxAccount.invalid', {
            url: '/Invalid?params',
            templateUrl: 'app/TaxAccount/partials/Invalid.html',
            controller: 'taxAccountInvalidController as invalidVm',
            params:{data:null}
        })

我不知道我可以放params:{data:null}。我认为stateParams必须进入状态配置的 Controller 声明中。

最佳答案

这是我的 Controller 需要包含的内容:
如果($ stateParams && $ stateParams.data){
vm.Account = $ stateParams.data;
}

这就是该州最终的样子:

.state('taxAccount.invalid', {
            url: '/Invalid?params',
            templateUrl: 'app/TaxAccount/partials/Invalid.html',
            controller: 'taxAccountInvalidController as invalidVm',
            params:{data:null}
        })

我不知道我可以放params:{data:null}。我认为stateParams必须进入状态配置的 Controller 声明中。

10-06 12:59