我遇到一个问题,在某种情况下,状态转换会发生两次。我有一个包含多个SPA的应用程序。我使用MVC路由为每个SPA提供服务,并且每个SPA都使用angular ui路由器来处理路由。
下面的图片显示了下拉菜单中每个项目是指向其他SPA
的链接的下拉列表下图显示了单击SPA链接时显示的选项卡。
我遇到的问题特定于以下步骤。
以下是相关代码段。
路线:
angular.module('settings').config(routeConfig);
routeConfig.$inject = ["$stateProvider", "$urlRouterProvider"];
function routeConfig($stateProvider, $urlRouterProvider) {
// default route
$urlRouterProvider.when('', 'Tab1');
$stateProvider.state('Tab1',
{
url: '/Tab1',
templateUrl: '/link/To/template.html',
controller: 'tab1controller as ctrl'
});
$stateProvider.state('Tab2',
{
url: '/Tab2',
templateUrl: '/link/To/template.html',
controller: 'tab2controller as ctrl'
});
$stateProvider.state('Tab3',
{
url: '/Tab3',
templateUrl: '/link/To/template.html',
controller: 'tab3controller as ctrl'
});
标签HTML:
<li role="presentation"><a role="tab" ui-sref="Tab1" ui-sref-active="tab-title-active">Tab 1</a></li>
<li role="presentation"><a role="tab" ui-sref="Tab2" ui-sref-active="tab-title-active">Tab 2</a></li>
<li role="presentation"><a role="tab" ui-sref="Tab3" ui-sref-active="tab-title-active">Tab 3</a></li>
我尝试收听$stateChangeStart
事件,并注意到在第4步中,它首先尝试转到Tab3
,然后由于某种未知原因返回Tab1
。另外,正如您在第二张图片中看到的那样,突出显示了两个选项卡,这意味着ui-sref-active已将两个选项卡标记为活动。
我尝试通过手动截取$stateChangeStart
事件,然后通过$state.go
和$state.transitionTo
进行转换而没有运气来改变状态更改。