在链接点击时强制重新加载路由/状态

时间:2015-10-30 18:34:42

标签: angularjs angular-ui-router single-page-application angularjs-routing ngroute

目前我正在做这样的事情

link.on('click', function () {
    if (link.attr('href') !== $route.current.originalPath)
        return;
    $route.reload();
});

我不知道副作用,但我想可能会有一些副作用。

有没有更直接的方法来处理ngRoute,例如通过$location

当应用程序更新为使用它时,在UI路由器中执行相同操作的方法是什么?

4 个答案:

答案 0 :(得分:7)

使用UI-Router我们有一组选项,其中一个是 {reload: true}

go(to, params, options)

  
      
  • location - {boolean=true|string=} - 如果为true将更新位置栏中的网址,如果为false则不会。如果是字符串,必须是“替换”,   这将更新网址并替换上次历史记录。
  •   
  • inherit - {boolean=true},如果为true,则会从当前网址继承网址参数。
  •   
  • relative - {object=$state.$current},当使用相对路径(例如'^')进行转换时,定义哪个状态是相对的。
  •   
  • notify - {boolean=true},如果为true,则会广播$ stateChangeStart和$ stateChangeSuccess事件。
  •   
  • reload (v0.2.5) - {boolean=false},如果为true,即使状态或参数没有改变也会强制转换,也就是重新加载   州。它与reloadOnSearch不同,因为你在使用它时会使用它   想要在一切都相同时强制重新加载,包括搜索   PARAMS。
  •   

所以我们可以强制状态重新加载:

$state.go("stateName", stateParams, {reload: true});

答案 1 :(得分:1)

您的代码可以转换为低于更改$route.reload()$state.reload()

<强>代码

link.on('click', function () {
    if (link.attr('href') !== $route.current.originalPath)
        return;
    //though this will not reload the controller content
    $state.reload(); //will force to reload state..
    $scope.$apply(); //needed here to tell angular js to run digest cycle.
});

git-hub issue开始,似乎$state.reload()重新加载状态,但控制器没有重新实例化。为此,您需要使用下面的代码而不是$state.reload()

$state.transitionTo('tab.locations', $state.$current.params, { 
  reload: true, inherit: true, notify: true 
});

答案 2 :(得分:1)

我发现这是UI路由器的最短路径:

$state.go($state.current, {}, {reload: true});

或者你可以这样做:

$state.transitionTo($state.current, $stateParams, {
       reload: true,
       inherit: false,
       notify: true
     });

答案 3 :(得分:0)

如果您使用 Ui.Router

&#13;
&#13;
link.on('click', function (event) {
    if (link.attr('href') !== $route.current.originalPath)
        return;
  
    event.preventDefault();
    
    return $scope.$apply(function() {
      return $state.reload(); // $state.go($state.current.name, $stateParams, { inherit: false, reload: true, notify: true });
    });
});
&#13;
&#13;
&#13;

如果您使用简单的 ngRoute ,则必须从templateCache中删除currentTemplate,并在$ timout中返回$ route.reload()!