我正在使用Angular UI路由器,想要重新加载当前状态并刷新所有数据/重新运行当前状态及其父状态的控制器。

我有3个状态级别:目录。组织。细节

organizations包含一个包含组织列表的表。单击表中的项目加载directory. organizations .details,并使用$StateParams传递该项的ID。所以在细节状态下,我加载这个项目的细节,编辑它们,然后保存数据。到目前为止一切正常。

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

我试过:

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

它会回到父状态但不会重载控制器,我猜是因为路径没有改变。理想情况下,我只想留在directory. organizations .details状态,并刷新父目录中的所有数据。

我也试过:

$state.reload()

我在$state的API WIKI上看到过这个。重新加载”(错误与控制器重新验证现在,修复很快)。

如果有任何帮助,我将不胜感激。


当前回答

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

但如果你想让每个控制器在视图改变后重新加载,你可以使用

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

其他回答

我不知道为什么这些方法对我都不起作用;最后成功的是:

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

这是在Angular 1.4.0中

我发现这是用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状态

如果你正在使用ionic v1,上面的解决方案将不起作用,因为ionic已经启用了模板缓存作为$ionicConfigProvider的一部分。

解决这个问题有点棘手——你必须在ionic.angular.js文件中将缓存设置为0:

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

对于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;
        }]);