重新加载当前状态 – 刷新数据
我正在使用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
更清洁的方法可能是以下几点:
<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视图=“假”到视图,我想重新加载时去。
不知道为什么这些似乎没有为我工作; 终于做到这一点的是:
$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状态,但我无法重新加载页面。 所以我的同事向我展示了一个很好的小窍门。
- 获取你的数据
- 在你的应用程序configuration创build一个加载状态
- 保存你想要在根目录中的状态。
- 设置您的位置“/加载”在您的app.run
- 在加载控制器中parsing路由承诺,然后将该位置设置为您的预期目标。
这对我有效。
希望它有帮助
如果您使用的是离子v1,则上述解决scheme将不起作用,因为离子已启用模板caching作为$ ionicConfigProvider的一部分。
解决这个问题有点怪异 – 您必须在ionic.angular.js文件中将caching设置为0:
$ionicConfigProvider.views.maxCache(0);