Angularjs UI路由器将url与哈希匹配(片段)

Angularjs UI路由器将url与哈希匹配(片段),angularjs,angular-ui-router,Angularjs,Angular Ui Router,使用UI路由器,我需要将URL与其中包含的哈希(片段)匹配(HTML5模式) 而上面的设置在使用下面的ui sref时起作用 <a ui-sref="myState({id: 1})"> ... // without hash => section == '' <a ui-sref="myState({id: 1, section: 'abc'})"> ... // section == 'abc' ..//没有散列=>section=='' ... // 节==

使用UI路由器,我需要将URL与其中包含的哈希(片段)匹配(HTML5模式)

而上面的设置在使用下面的ui sref时起作用

<a ui-sref="myState({id: 1})"> ... // without hash => section == ''
<a ui-sref="myState({id: 1, section: 'abc'})"> ... // section == 'abc'
..//没有散列=>section==''
... // 节==“abc”
。。当我通过在地址栏中指定片段手动从其他页面重定向浏览器时(或者当在完全不同的站点上单击包含哈希的链接时),它会失败在这种情况下,URL匹配器尝试在没有散列的情况下与URL匹配,我被迫创建一个新的人工状态,该状态与上面相同,但没有散列和它的URL属性中的param
部分。但这使得我不可能拥有包含哈希的可书签URL


我需要有一个状态,其中此片段参数是可选的,当重定向到保留给定
参数(如果存在)的页面时,通过应用程序内状态转换和url匹配机制正确匹配。

我通过使用
参数解决了问题:

<a ui-sref="myState({id: 1})"> ... // without hash => # == ''
<a ui-sref="myState({id: 1, '#': 'abc'})"> ... // # == 'abc'
这将页面加载状态与URL中的哈希相匹配,但是它仍然没有在状态参数中设置
#
值。我通过在
$stateChangeStart
事件处理程序中手动设置参数来解决此问题:

 $rootScope.$on('$stateChangeStart',
      function(event, toState, toParams, fromState, fromParams) {
            var hash = $location.hash();
            if (hash) {
                 toParams['#'] = hash;
            }
      }
url: '/path/:id/page',
 $rootScope.$on('$stateChangeStart',
      function(event, toState, toParams, fromState, fromParams) {
            var hash = $location.hash();
            if (hash) {
                 toParams['#'] = hash;
            }
      }