重新加载当前状态 – 刷新数据

我正在使用Angular UI路由器,并希望重新加载当前状态并刷新所有数据/重新运行当前状态和它的父母的控制器。

我有3个州级别: directory.organisations.details

directory.organisations包含一个包含组织列表的表。 点击表中的一个项目加载directory.organisations.details与$ StateParams传递项目的ID。 所以在细节状态下,我加载这个项目的细节,编辑它们,然后保存数据。 迄今为止都很好。

现在我需要重新加载这个状态并刷新所有的数据。

我努力了:

$state.transitionTo('directory.organisations'); 

哪些去父母状态,但不重新加载控制器,我猜是因为path没有改变。 理想情况下,我只想保持在directory.organisations.details状态并刷新父项中的所有数据。

我也试过了:

 $state.reload() 

我已经在API WIKI上看到了$ state.reload的这个问题(控制器现在重新实现的bug,很快就会修复)“。

任何帮助将不胜感激?

我发现这是用ui-router刷新的最短的工作方式:

 $state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams 

更新版本:

 $state.reload(); 

哪一个是别名:

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

文档: https : //angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_reload

这个解决scheme在AngularJS V.1.2.2中工作:

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

那将是最后的解决办法。 (由@ Hollan_Risley的post启发)

 'use strict'; angular.module('app') .config(function($provide) { $provide.decorator('$state', function($delegate, $stateParams) { $delegate.forceReload = function() { return $delegate.go($delegate.current, $stateParams, { reload: true, inherit: false, notify: true }); }; return $delegate; }); }); 

现在,无论何时您需要重新加载,只需拨打:

 $state.forceReload(); 

用于离子结构

 $state.transitionTo($state.current, $state.$current.params, { reload: true, inherit: true, notify: true });//reload $stateProvider. state('home', { url: '/', cache: false, //required 

https://github.com/angular-ui/ui-router/issues/582

更清洁的方法可能是以下几点:

 <a data-ui-sref="directory.organisations.details" data-ui-sref-opts="{reload: true}">Details State</a> 

我们只能从HTML重新加载状态。

@Holland Risley的答案现在可以在最新的ui路由器上作为api使用。

 $state.reload(); 

强制重载当前状态的方法。 所有的决议重新解决,控制器重新实现,事件重新启动。

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state

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

如果你想重新加载你的整个页面,就像它似乎,只要注入$窗口到您的控制器,然后调用

 $window.location.href = '/'; 

但是如果你只想重新加载当前的视图,请注入$ scope,$ state和$ stateParams(后者是为了防止在这个即将重新加载的时候需要改变一些参数,比如页码),然后在控制器方法:

 $stateParams.page = 1; $state.reload(); 

AngularJS v1.3.15 angular-ui-router v0.2.15

 $scope.reloadstat = function () { $state.go($state.current, {}, {reload: true}); }; 

愚蠢的解决方法,始终有效。

 $state.go("otherState").then(function(){ $state.go("wantedState") }); 

对于angular度v1.2.26,以上都没有工作。 调用上述方法的ng-click将不得不被点击两次以使状态重新加载。

所以我结束了使用$超时模拟2点击。

 $provide.decorator('$state', ["$delegate", "$stateParams", '$timeout', function ($delegate, $stateParams, $timeout) { $delegate.forceReload = function () { var reload = function () { $delegate.transitionTo($delegate.current, angular.copy($stateParams), { reload: true, inherit: true, notify: true }) }; reload(); $timeout(reload, 100); }; return $delegate; }]); 

一切都失败了。 只有工作…是添加caching视图=“假”到视图,我想重新加载时去。

从这个问题https://github.com/angular-ui/ui-router/issues/582

不知道为什么这些似乎没有为我工作; 终于做到这一点的是:

 $state.reload($state.current.name); 

这是与Angular 1.4.0

我有多个嵌套视图,目标是重新加载只有一个内容。 我尝试了不同的方法,但唯一对我有用的是:

 //to reload $stateParams.reload = !$stateParams.reload; //flip value of reload param $state.go($state.current, $stateParams); //state config $stateProvider .state('app.dashboard', { url: '/', templateUrl: 'app/components/dashboard/dashboard.tmpl.html', controller: 'DashboardController', controllerAs: 'vm', params: {reload: false} //add reload param to a view you want to reload }); 

在这种情况下,只需要视图将被重新加载,caching仍然可以工作。

我知道有一堆的答案,但我发现这样做,而不会导致整个页面刷新的最佳方式是创build一个虚拟参数的路线上,我想刷新,然后当我调用路由我通过随机数到虚拟参数。

  .state("coverage.check.response", { params: { coverageResponse: null, coverageResponseId: 0, updater: 1 }, views: { "coverageResponse": { templateUrl: "/Scripts/app/coverage/templates/coverageResponse.html", controller: "coverageResponseController", controllerAs: "vm" } } }) 

然后呼叫该路线

 $state.go("coverage.check.response", { coverageResponse: coverage, updater: Math.floor(Math.random() * 100000) + 1 }); 

像魅力一样工作,并处理决议。

你可以使用@Rohan回答https://stackoverflow.com/a/23609343/3297761

但是如果你想让每个控制器在视图更改后实时加载,你可以使用

 myApp.config(function($ionicConfigProvider) { $ionicConfigProvider.views.maxCache(0); ... } 

我有这个问题,这是我的头,我的路由从JSON文件读取,然后馈送到指令。 我可以点击一个UI状态,但我无法重新加载页面。 所以我的同事向我展示了一个很好的小窍门。

  1. 获取你的数据
  2. 在你的应用程序configuration创build一个加载状态
  3. 保存你想要在根目录中的状态。
  4. 设置您的位置“/加载”在您的app.run
  5. 在加载控制器中parsing路由承诺,然后将该位置设置为您的预期目标。

这对我有效。

希望它有帮助

如果您使用的是离子v1,则上述解决scheme将不起作用,因为离子已启用模板caching作为$ ionicConfigProvider的一部分。

解决这个问题有点怪异 – 您必须在ionic.angular.js文件中将caching设置为0:

 $ionicConfigProvider.views.maxCache(0);