当哈希没有明显改变时,我如何强制 iron-router 做出反应?

How do I force iron-router to react when the hash has not apparently changed?

当使用 iron-router 滚动到使用引用下一节 ID 的锚按钮的哈希时,例如:

<a class="button" href="{{pathFor 'home' hash='about'}}"> 

iron-router 会在第一次点击按钮时愉快地将我们带到关于部分。

如果您使用鼠标向上滚动并再次单击同一个按钮,则不会发生滚动。

我推测这是因为目的地显然与当前路由器位置相同,因此不会触发任何反应。

我怎样才能强制反应?

我已经尝试在覆盖 scrollToHash 函数时清除 window.location 中的哈希值:

Router._scrollToHash = function(hash) {
  var section = $(hash);
  if (section.length) {
    var sectionTop = section.offset().top;
    $("html, body").animate({
      scrollTop: sectionTop
    }, "slow");
  }
  window.location.hash = '';
};

这允许第二次点击但不能再点击,这让我很困惑。

将 window.location.hash 设置为 space 而不是空字符串有效:

Router._scrollToHash = function(hash) {
  var section = $(hash);
  if (section.length) {
    var sectionTop = section.offset().top;
    $("html, body").animate({
      scrollTop: sectionTop
    }, "slow");
  }
  window.location.hash = ' ';

};

可能将其设置为不存在的散列也会。

除了包含可以从第二页激活的菜单 link 以将您带到哈希的情况外,您还需要这个包:

meteor add okgrow:iron-router-autoscroll

结合使用它涵盖了我想到的所有情况。