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

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

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

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

我试过:

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

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

我也试过:

$state.reload()

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

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


当前回答

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

其他回答

这个解决方案适用于AngularJS V.1.2.2:

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

这就是最终的解决方案。(灵感来自@Hollan_Risley的帖子)

'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();

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

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

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

@Holland Risley的答案现在可以在最新的ui-router中作为api使用。

$state.reload();

强制重新加载当前状态的方法。所有的决议都是 重新解析,控制器重新实例化,事件重新触发。

http://angular-ui.github.io/ui-router/site/ / api / ui.router.state。美元的状态

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

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

$ionicConfigProvider.views.maxCache(0);