【发布时间】:2016-07-02 05:45:18
【问题描述】:
我无法访问在控制器中以我的 ui-router 状态解析的密钥
当前处于子状态,在显示模板之前会发出 http 请求以检查用户是否已通过身份验证。如果没有,在 onEnter 部分它会重定向到另一个状态。
这行得通,但我也想在显示的视图中访问已解析的数据 我不知道如何访问控制器中的已解析键(将其分配给范围属性)或直接在视图中(这应该可以通过角度 1.5.0 中引入的 $scope.$resolve 实现)。 我尝试使用密钥、@resolve 属性等注入控制器。到目前为止,我在谷歌搜索这个问题时得到的所有工作示例都对我不起作用。
这是状态:
.state('login.resetPassword',{
url: '/resetPassword/{validateToken}'
,resolve: {
validateResponse: function($stateParams,AuthService,SessionService){
return AuthService.validatePasswordResetToken($stateParams.validateToken)
.then(function(validateResponse){
SessionService.set('validateToken',$stateParams.validateToken);
return validateResponse.data; //{validate_ok:true/false,message:I18nKey}
})
}
}
,onEnter: function($stateParams,$state,validateResponse){
if(validateResponse.validate_ok){
// do nothing, go to resetPassword
}
else{
$state.go('message',{message:validateResponse.message});
}
}
,views: {
'forgotPassword': {
templateUrl: '/app/components/login/views/resetPassword.html'
}
}
})
在开发人员工具中,我看到 validateResponse 解析正常,在 onEnter 函数中,我看到已解析的键 'validateResponse' 带有参数中的值。
在控制器中我尝试访问已解析的属性:
['validateResponse',function(validateResponse){
console.log('validateResponse: ',validateResponse)
...
}]
(为简洁起见,此处仅显示相关部分)
...但是调试器甚至从来没有到达 console.log 的那一行。 在视图中,我在 $scope 中没有 validateResponse 属性...没有 $console.log() 或 Batarang 范围视图
父状态包含对控制器的引用,但即使我将控制器移动到子状态也没有区别:
这里有什么问题??????
【问题讨论】:
标签: angularjs angular-ui-router resolve