Ale*_*ler 6 angularjs angular-ui-router
我有一个具有大量状态的ui-router应用程序,我需要能够通过$ 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'
})
Run Code Online (Sandbox Code Playgroud)
还有更多看起来像这样的州.
我有一个数据模型,它只是一个工厂,其对象是通过函数获取和设置的.因此,每当我调用saveAccount()时,它都会获取模型并将其发送到Web API后端.后端验证数据,并用状态参数发送回(或者account.invalid,account.valid或account.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;
}
};
}
])
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试通过stateparams发送帐户.
在控制器中,我基本上需要能够说出来 vm.account = $stateParams.account
如何修改我的$状态,使其都具有命名控制器并获取状态参数并从控制器访问?
我没有通过服务传递数据的原因是因为有多个模型,所以我不能只在$ httpInterceptor中提供服务的名称,因为它不是常量.
这是我的控制器需要的内容:if($ 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}
})
Run Code Online (Sandbox Code Playgroud)
我没有意识到我可以放params:{data:null}.我认为stateParams必须在状态配置中进入控制器声明.
这是我的控制器需要包含的内容: if ($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}
})
Run Code Online (Sandbox Code Playgroud)
我没有意识到我可以放params:{data:null}。我认为 stateParams 必须进入状态配置中的控制器声明。
| 归档时间: |
|
| 查看次数: |
4077 次 |
| 最近记录: |