Angularjs Angular JS-Angular UI路由器-基于位置监视重新加载当前状态

Angularjs Angular JS-Angular UI路由器-基于位置监视重新加载当前状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我创建了一个导航栏,当用户单击与当前状态对应的链接时,不会发生任何事情。例如,您在/about上,并单击带有href=/about的关于链接。菜单一直开着。如果您单击另一个链接,例如“不同状态”,则该链接有效 我在某处读到,如果当前状态与目标状态相同,则忽略状态转换。我甚至想知道,由于位置没有改变,是否启动了状态转换 link引用常规URI,如/、/contact或/about 我猜菜单保持打开状态是因为没有发生转换。即使处于相同的状态,是否有办法强制转换?尝试将URL更改为/about。。默认

我创建了一个导航栏,当用户单击与当前状态对应的链接时,不会发生任何事情。例如,您在/about上,并单击带有href=/about的关于链接。菜单一直开着。如果您单击另一个链接,例如“不同状态”,则该链接有效

我在某处读到,如果当前状态与目标状态相同,则忽略状态转换。我甚至想知道,由于位置没有改变,是否启动了状态转换

link引用常规URI,如/、/contact或/about

我猜菜单保持打开状态是因为没有发生转换。即使处于相同的状态,是否有办法强制转换?

尝试将URL更改为/about。。默认情况下,Angular UI Router在URL前面添加一个

如果这不起作用,请使用此选项检测正在发生的情况:

$scope.$on('$stateChangeStart', function(evt, toState, toParams, fromState, fromParams) {
     console.log("To state is"+toState.name+", From State is "+fromState.name);
  });
您可以看到状态更改是否已经开始

编辑:

如果要检查状态更改未发生的原因,请使用以下代码段:

 $rootScope.$on('$stateChangeError',
   function (event, toState, toParams, fromState, fromParams, error) {
     console.log('$stateChangeError', event, toState, toParams, fromState, fromParams, error);
  });
编辑-分辨率:
当您在/about中,然后href为/about时,UI路由器会在您的/about状态中查找一个子状态about。您想要的是让URL读取。只有点代表当前状态。如果您想要更好的实现,而不是使用HREF,那么可以使用ui sref=.about。。例如,

我启用了HTML5模式,所以我不需要。没有触发转换。我想这是对的,因为位置没有改变好酷。。没关系,让我们分析一下原因。这可能是因为路径指定错误。我添加了一种诊断方法。。请查看。不幸的是,$stateChangeError没有日志。您可以轻松复制,只需创建一个带有href的链接。然后,当您处于该状态时,再次单击该链接。你会发现什么都没发生
 $rootScope.$on('$stateChangeError',
   function (event, toState, toParams, fromState, fromParams, error) {
     console.log('$stateChangeError', event, toState, toParams, fromState, fromParams, error);
  });