我使用Angular UI路由器,我需要使用state.go方法发送参数。像这样:
$state.go('myState', { redirect : true });
我还需要在事件stateChangeStart中检查该参数。像这样:
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
//redirect parameter is not available here.
//should be in toParams right?
}
编辑:这是我的州定义:
$stateProvider.state('customer.search', {
url: '/search',
views: {
"right-flyover@": {
templateUrl: 'customer/search/search.tpl.html',
controller: 'CustomerSearchCtrl'
}
},
data: {
pageTitle: 'Sök användare',
hidden: true
}
});
答案 0 :(得分:9)
ui-router
将传递为州层次结构定义的参数 - 我们正在导航到。请检查:
URL Parameters (引用:)
通常,URL都有动态部分,称为参数。有几个选项可用于指定参数。基本参数如下所示:
$stateProvider
.state('contacts.detail', {
url: "/contacts/:contactId",
templateUrl: 'contacts.detail.html',
controller: function ($stateParams) {
// If we got here from a url of /contacts/42
expect($stateParams).toBe({contactId: 42});
}
})
因此,如果你想使用 param redirect
,你的州应该是这样的:
$stateProvider.state('customer.search', {
url: '/search/:redirect',
...
});
然后我们可以使用:
$state.go('customer.search', { redirect : true });
这将成为$statePrams
但也许您尝试使用已发送的选项,而不是参数:
Object - 如果传递了Object,则object是一个选项哈希。支持以下选项:
那将是第三个参数(重新加载而不是重定向):
$state.go('myState', null, { reload: true });
答案 1 :(得分:1)
我最近通过使用cache属性isStateProvider解决了这个问题并将其设置为false 像
.state('home.stats', {
cache: false,
url:'/stats',
templateUrl: 'views/stats.html',
controller: 'StatsCtrl',
controllerAs: 'stats'
})
答案 2 :(得分:0)
$ state.go实际上会返回一个承诺,因此您可以执行以下操作:
$state.go('myState').then(() => {
if (redirect) {
// do something
}
});
我意识到这不是我正在寻找的问题的一般解决方案,但它让我完成了工作。如果需要重复使用逻辑,可以轻松地将它包装在$ state对象的方法中。