gpt4 book ai didi

javascript - Angular ui 路由器 : get $state info of toState in resolve

转载 作者:IT王子 更新时间:2023-10-29 03:03:24 25 4
gpt4 key购买 nike

更新:从 1.0.0alpha0 开始,这在 angular-ui-router 中应该是可能的。请参阅发行说明 https://github.com/angular-ui/ui-router/releases/tag/1.0.0alpha0和问题https://github.com/angular-ui/ui-router/issues/1018我创造了。

我想访问状态的名称和应用程序在处理解析时使用 Angular ui-router 导航到的其他属性。

原因:我想在允许应用进入该页面之前异步加载一些用户数据(包括他们的访问权限)。

目前这是不可能的,因为将 $state 注入(inject) resolve 指向您正在导航离开的状态,而不是您正在导航到的状态。

我知道我可以:

  • 使用 $rootScope('$stateChangeStart') 在其他地方获取 toState 并将其保存在我的设置服务中。但我觉得有点乱。
  • 将状态硬编码到解析中,但我不想对所有页面重用我的解析

我还在 ui-router github 上创建了一个问题(如果您有兴趣请加 1!): https://github.com/angular-ui/ui-router/issues/1018

到目前为止,这是我的代码。任何帮助表示赞赏!

.config(function($stateProvider) {

$stateProvider.state('somePage', {
// ..
resolve: {
userData: function($stateParams, $state, Settings) {
return Settings.getUserData() // load user data asynchronously
.then(function (userData) {
console.log($stateParams);
console.log($state);
// Problem: $state still points to the state you're navigating away from
});
}
}
});
});

最佳答案

Ui-Router 1.x 更新

$provide.decorator('$state', ($delegate, $transitions) => {
$transitions.onStart({}, (trans) => {
$delegate.toParams = trans.params()
$delegate.next = trans.to().name
})
return $delegate
})

Ui 路由器 0.x

您始终可以使用 nexttoParams 属性装饰 $state:

angular.config(function($provide) {
$provide.decorator('$state', function($delegate, $rootScope) {
$rootScope.$on('$stateChangeStart', function(event, state, params) {
$delegate.next = state;
$delegate.toParams = params;
});
return $delegate;
});
});

并这样使用:

.state('myState', {
url: '/something/{id}',
resolve: {
oneThing: function($state) {
console.log($state.toParams, $state.next);
}
}
});

关于javascript - Angular ui 路由器 : get $state info of toState in resolve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22985988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com