AngularJs:对同一个按钮的多次点击无效

时间:2015-03-21 07:30:42

标签: javascript angularjs

我在Angular Js中创建了一个网页。每当我从Home页面导航到其他页面并点击该页面上的Home按钮时,它就会导航回Home页面,这是预期的并且正常工作。但是,当我再次单击Home按钮,然后我希望页面刷新(因为目前它是Home页面),但它没有发生。

2 个答案:

答案 0 :(得分:4)

当您尝试前往的路线的$location与您当前的路线相同时,Angular不会重新加载视图。 您可以使用reload()方法来实现此目的。 见https://docs.angularjs.org/api/ngRoute/service/$route

(确保切换api版本以匹配您正在使用的Angular版本)

对于更清洁的解决方案(imho)而不是使用搜索参数,请参阅以下代码(我使用的是controllerAs语法):

angular.module('app').controller('MainController', [
  '$location',
  '$route',
  function ($location, $route) {
    var main = this;

    main.goToHome = function () {
      if ($location.path() === '/') {
        $route.reload();
      }
    };
  }
]);

结合在点击时调用主页按钮链接上的该功能:

<a href="#/" ng-click="main.goToHome()">Home</a>

此功能会在您单击按钮时检查位置,如果位置为/,则会重新加载视图。

当然,您可以使用您的家庭路线使用的任何网址替换路线网址。

答案 1 :(得分:0)

以下是我提出的未经测试的替代解决方案。

在主页的路径配置对象中(我假设其网址为/home),请指定以下参数:

{
    // ...
    reloadOnSearch: true,
    redirectTo: function (routeParams, path, search) {
         if (search.redirected) {
             // don't redirect, so return same path + search
             return '/home?redirected=true';
         } else {
             return '/home';
    },
    // ...
}

我们的想法是,当您链接到/home时,redirectTo()功能会触发并将您重定向到/home?redirected=true。这将是对搜索参数的更改,因此路由应该由于指定reloadOnSearch: true而正确重新加载。由于主页链接始终指向/home,因此页面应始终重新加载。

它有点难看,并且可能会导致主页控制器在从其他页面返回主页时运行两次,但如果你无法通过任何其他方式工作,这个可能值得一个尝试。