当前位置: 首页 > 知识库问答 >
问题:

地址更改时如何停止Angular重新加载

许淳
2023-03-14

我正在使用Angular的滚动键主播滚动键,如下所示:

app.controller('TestCtrl', function($scope, $location, $anchorScroll) {
   $scope.scrollTo = function(id) {
      $location.hash(id);
      $anchorScroll();
   }
});

<a ng-click="scrollTo('foo')">Foo</a>

<div id="foo">Here you are</div>

我的问题是,当我点击链接时,页面会向下滚动,但在50%的情况下,页面会重新加载,因为URL中的哈希值会发生变化。

如何防止Angular重新加载页面?

更新:我在这里找到了

https://groups.google.com/forum/?fromgroups=#!msg/angular/BY2ekZLbnIM/MORF-z2vHnIJ

那个啊

$location服务广播$locationChangeStart事件。您可以观察并调用该事件。preventDefault()停止导航。很好

有人能告诉我们如何观察这一事件并防止违约吗


共有3个答案

岳玉书
2023-03-14

我想这可能对你有帮助

$scope.redirectTodiv = function(divname,event) {
    var id = $location.hash();
    $location.hash(divname);
    $anchorScroll();
    $location.hash(id);
};

来自:https://stackoverflow.com/a/25930875/4138368

狄令
2023-03-14

您可以将$event参数添加到ng click处理程序中:

<a ng-click="scrollTo('foo', $event)">Foo</a>

在scrollTo函数中,您可以执行以下操作:

scope.scrollTo = function(str, event) {
    event.preventDefault();
    event.stopPropagation();

    /** SOME OTHER LOGIC */
}

但这意味着您应该手动从“a”元素中解析目标锚点哈希。

狄阳秋
2023-03-14

发生刷新是因为调用了locationChangeStart事件。您可以通过执行以下操作来停止此操作:

scope.$on('$locationChangeStart', function(ev) {
    ev.preventDefault();
});

实际上,我最终编写了自己的scrollTo指令,在指令中使用了这个调用。

Plnkr/Github

这是我的另一篇文章

 类似资料:
  • 问题内容: 例如,我希望此导航更改可重新加载状态: 但我不希望此导航重新加载状态: 根据ui-router文档,设置应可完成此操作,但请尝试以下操作。当为时,即使文档说应该更改路径参数,它也不会重新加载状态。 Plunkr:http: //run.plnkr.co/ZPy9uabYlkMilwdS/#/param 问题答案: 这是UI-Router中的错误,已在0.2.15版中修复: https:

  • 问题内容: 我有http://mysite.com/index.php。 还有一个子菜单 主页=> http://mysite.com/index.php 关于我们=> http://mysite.com/about.us.php 产品=> http://mysite.com/products.php 但我希望http://mysite.com/index.php处理每个请求,并仅使用Ajax请求

  • 问题内容: 嘿,我注意到在浏览GitHub存储库时,它使用AJAX加载每个文件夹/文件。 我了解所有这些,我只是想知道他们如何更改URL。您可以使用JavaScript获取并设置URL吗?如果是这样,对于将基于JavaScript的网站的一部分添加为书签可能非常有用。(其中的几页,通过JavaScript在其中移动) 谢谢。 问题答案: 它在历史记录操作API中使用了新的push/ pop状态功能

  • 问题内容: 我有以下代码: MainActivity.java TabsPagerAdapter.java 我正在制作一个图书馆应用程序,其中导航是通过选项卡进行的,问题是每次我从第三个选项卡转到第一个或第一个至第三个时,选项卡的内容都在刷新,我想防止刷新,任何请帮助 ? 问题答案: 默认情况下,在滑动页面时会重新创建片段。为防止这种情况,您可以尝试以下三种方法之一: 1. 在您的片段中,呼叫。

  • 问题内容: 如何动态更改JAXWS客户端使用的地址?该客户端是由wsimport生成的。 问题答案: 使用Apache CXF解决了该问题。 仅用两行代码!这是代码段:

  • 问题内容: 我有两个定义如下的实体bean(删除了无关的东西): CriticalItems定义如下: 在我的DAO代码中-我有以下方法: 当我加载MasterItem时,它会正确加载,并且还会按照指示加载CriticalItems Set中的数据。然后,我将此数据发送到我的UI,并获得更新的副本,然后尝试将其保留。用户更新MasterItem对象中的字段,但不触摸CriticalItems Se