我正在使用Angular UI路由器,想要重新加载当前状态并刷新所有数据/重新运行当前状态及其父状态的控制器。
我有3个状态级别:目录。组织。细节
organizations包含一个包含组织列表的表。单击表中的项目加载directory. organizations .details,并使用$StateParams传递该项的ID。所以在细节状态下,我加载这个项目的细节,编辑它们,然后保存数据。到目前为止一切正常。
现在我需要重新加载这个状态并刷新所有数据。
我试过:
$state.transitionTo('directory.organisations');
它会回到父状态但不会重载控制器,我猜是因为路径没有改变。理想情况下,我只想留在directory. organizations .details状态,并刷新父目录中的所有数据。
我也试过:
$state.reload()
我在$state的API WIKI上看到过这个。重新加载”(错误与控制器重新验证现在,修复很快)。
如果有任何帮助,我将不胜感激。
我有多个嵌套视图,目标是只重载一个包含内容的视图。
我尝试了不同的方法,但唯一对我有效的是:
//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
});
在这种情况下,只有需要的视图将被重新加载,缓存仍将工作。
我发现这是用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。$ # methods_reload状态
对于angular v1.2.26,上面这些都不行。调用上述方法的ng-click必须单击两次,才能使状态重新加载。
所以我最终使用$timeout模拟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;
}]);