AngularJs:重新加载页面

Posted

技术标签:

【中文标题】AngularJs:重新加载页面【英文标题】:AngularJs: Reload page 【发布时间】:2014-03-20 01:55:50 【问题描述】:
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>

我想重新加载页面。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用$route 服务的reload 方法。在您的控制器中注入$route,然后在您的$scope 上创建一个方法reloadRoute

$scope.reloadRoute = function() 
   $route.reload();

然后你可以像这样在链接上使用它:

<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>

此方法将导致当前路由重新加载。但是,如果您想执行完全刷新,则可以注入 $window 并使用它:

$scope.reloadRoute = function() 
   $window.location.reload();

**稍后编辑(ui-router):**

正如 JamesEddyEdwards 和 Dunc 在他们的回答中提到的,如果您使用的是 angular-ui/ui-router,您可以使用以下方法重新加载当前状态/路线。只需注入 $state 而不是 $route 然后你就有了:

$scope.reloadRoute = function() 
    $state.reload();
;

【讨论】:

如果您迫切希望重新加载 Angularise,这是一个很好的答案。 我怎样才能在全局范围内更改此行为,而不是向所有链接添加操作 @OMGPOP 对于所有链接,全局是什么意思? 我的意思是,对于您需要执行此操作的所有链接。是否可以为所有链接配置一次? @AlexandrinRus 这给了我以下 [$rootScope:infdig] 10 $digest() 迭代次数。中止!【参考方案2】:

window 对象是通过$window 服务为easier testing and mocking 提供的,你可以使用类似的东西:

$scope.reloadPage = function()$window.location.reload();

还有:

<a ng-click="reloadPage"  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

顺便说一句,我不认为 $route.reload() 实际上会重新加载页面,而是 only the route。

【讨论】:

我建议使用$window 而不是window 感谢您的贡献。你能解释一下为什么吗? 是的,对不起。最好用the $window docs 解释,主要是因为reloadPage 在使用$window 时会(更好)可测试。【参考方案3】:
 location.reload(); 

成功了。

<a ng-click="reload()">

$scope.reload = function()

   location.reload(); 

不需要路由或任何简单的旧js

【讨论】:

喜欢简单! 它会破坏业力/茉莉花测试,因为它会重新加载页面并且不可模拟。通过使用$window 提供程序,可以在测试中进行模拟【参考方案4】:

类似于 Alexandrin 的回答,但使用 $state 而不是 $route:

(来自 JimTheDev 的 SO 回答 here。)

$scope.reloadState = function() 
   $state.go($state.current, , reload: true);


<a ng-click="reloadState()" ... 

【讨论】:

【参考方案5】:

如果使用我绝对推荐的更高级的 Angulars ui-router,那么您现在可以简单地使用:

$state.reload();

这与邓克的回答基本相同。

【讨论】:

【参考方案6】:

我避免无限循环的解决方案是创建另一个进行重定向的状态:

$stateProvider.state('app.admin.main', 
    url: '/admin/main',
    authenticate: 'admin',
    controller: ($state, $window) => 
      $state.go('app.admin.overview').then(() => 
        $window.location.reload();
      );
    
  );

【讨论】:

【参考方案7】:

Angular 2+

我在搜索 Angular 2+ 时发现了这个,所以方法如下:

$window.location.reload();

【讨论】:

这不是 Angular 特有的,顺便说一下,它的 javascript 方式。【参考方案8】:

这可以通过在 JavaScript 中调用 reload() 方法来完成。

location.reload();

【讨论】:

【参考方案9】:

使用$route.reload() 很容易(不要忘记将 $route 注入您的控制器),但从您的示例中,您可以使用“href”而不是“ng-href”:

<a href=""  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

您只需要使用 ng-href 来保护用户免受他们在 Angular 替换 标签的内容之前点击导致的无效链接。

【讨论】:

$route 是 ng.route.IRouteService 的一部分??【参考方案10】:

在 Angular 1.5 上 - 在尝试了上述一些解决方案后,只想重新加载数据而不刷新整页,我在正确加载数据时遇到了问题。不过我注意到,当我转到另一条路线然后返回当前路线时,一切正常,但是当我只想使用$route.reload() 重新加载当前路线时,某些代码无法正确执行。然后我尝试通过以下方式重定向到当前路由:

$scope.someFuncName = function () 
    //go to another route
    $location.path('/another-route');
;

在模块配置中,添加另一个when:

.config(['$routeProvider', function($routeProvider) 
     $routeProvider.when('/first-page', 
         templateUrl: '/first-template',
         controller: 'SomeCtrl'
     ).when('/another-route', //this is the new "when"
         redirectTo: '/first-page'
     );
])

它对我来说很好用。它不会刷新整个页面,而只会导致当前控制器和模板重新加载。我知道这有点 hacky,但这是我找到的唯一解决方案。

【讨论】:

一个更简单的方法可能是var reload = $location.url(); $location.url(''); $timeout(function() $location.url(reload); );;无需创建随机路线。但是看看哪些代码不会为您重新评估会很有趣。看起来甚至redirectTos 和resolve 函数re-execute on a normal $route.reload()(查看console.log 的)。【参考方案11】:
<a title="Pending Employee Approvals" href="" ng-click="viewPendingApprovals(1)">
                    <i class="fa fa-user" aria-hidden="true"></i>
                    <span class="button_badge">pendingEmployeeApprovalCount</span>
                </a>

在控制器中

 $scope.viewPendingApprovals = function(type) 
                if (window.location.hash.substring(window.location.hash.lastIndexOf('/') + 1, window.location.hash.length) == type) 
                    location.reload();
                 else 
                    $state.go("home.pendingApproval",  id: sessionStorage.typeToLoad );
                
            ;

在路由文件中

.state('home.pendingApproval', 
        url: '/pendingApproval/:id',
        templateUrl: 'app/components/approvals/pendingApprovalList.html',
        controller: 'pendingApprovalListController'
    )

所以,如果 url 中传递的 id 与单击锚点调用的函数中的 id 相同,则只需重新加载,否则按照请求的路线。

如果有帮助,请帮我改进这个答案。欢迎大家提出建议。

【讨论】:

这花了我一个月的时间才弄清楚为什么页面没有重新加载【参考方案12】:

这可以通过在纯 JavaScript 中调用窗口对象的 reload() 方法来完成

window.location.reload();

【讨论】:

【参考方案13】:

我建议参考该页面。官方建议

https://docs.angularjs.org/guide/$location

【讨论】:

以上是关于AngularJs:重新加载页面的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 进度条为 100% 后重新加载页面 5 秒

AngularJS - 删除Hashbang后页面重新加载时出现404错误[重复]

AngularJs:重新加载页面

href 导致使用 Angularjs 和 Twitter Bootstrap 意外重新加载页面

如何使用AngularJS重新加载或渲染整个页面

angularjs加载渲染完页面怎么更改数据?