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

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

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

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

我试过:

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

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

我也试过:

$state.reload()

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

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


当前回答

我知道有一堆答案,但我发现最好的方法,这样做,而不引起整个页面刷新是在路由上创建一个虚拟参数,我想要刷新,然后当我调用路由时,我传递一个随机数到虚拟参数。

            .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 });

很有魅力,能解决问题。

其他回答

我有这个问题,它是破坏我的头,我的路由是从一个JSON文件读取,然后馈送到一个指令。我可以点击一个ui状态,但我不能重新加载页面。我的一个同事给我展示了一个很好的小技巧。

获取你的数据 在你的应用配置中创建一个加载状态 将您想要进入的状态保存在rootscope中。 在app.run中设置你的位置为“/loading” 在加载控制器中解析路由承诺,然后将位置设置为您的预期目标。

这对我很管用。

希望能有所帮助

我知道有一堆答案,但我发现最好的方法,这样做,而不引起整个页面刷新是在路由上创建一个虚拟参数,我想要刷新,然后当我调用路由时,我传递一个随机数到虚拟参数。

            .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 });

很有魅力,能解决问题。

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

//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
  });

在这种情况下,只有需要的视图将被重新加载,缓存仍将工作。

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

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

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

对我来说,一切都失败了。唯一管用的是……是添加cache-view="false"到视图,我想重新加载时去它。

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