1

我有一个依赖于 URL 片段的应用程序#moved。一段 JS 代码提取并提醒用户更新她的书签:

if (window.location.hash === '#moved') {
  window.location.hash = "";
  history.pushState('', document.title, window.location.pathname);
  show_notification();
}

现在测试失败了,因为在引入 Angular(稳定版本,1.0.8)之后,#moved正在重写为#/moved. (我正在注入$location我的控制器,但我不确定这是否是导致行为的原因。)

我可以改变条件,但我很好奇为什么 Angular 会这样做以及如何避免它?

4

1 回答 1

0

对于我的用例,我既想使用 Angular 的路由,又想使用一些书签来滚动到内容。我最终为我的书签使用了一个指令,并单独留下了路由。

<ul>
   <li><a href="#" app-bookmark="body">Home</a></li>
   <li><a href="#" app-bookmark="#usage">Getting Started</a></li>
   <li><a href="#" app-bookmark=".examples .first">Examples</a></li>
</ul>

然后我使用了以下指令。这使用 jQuery 来创建平滑的滚动效果,但也可以轻松地document.body.scrollTop代替 animate 函数。

app.directive('appBookmark', function() {
   return {
      restrict: 'A',
      compile: function(el, attr) {
         el.on('click', function(e) {
            e.preventDefault();
            e.stopPropagation();
            $('body,html').animate({scrollTop: Math.max($(attr.appBookmark).offset().top-50, 0)});
        });
      }
   }
});
于 2013-12-16T18:24:38.943 回答