$ route.reload()不适用于ui-router

时间:2013-10-25 07:01:45

标签: angularjs angular-ui-router

我已切换到ui-router。一切顺利,除了一件事。在我的页面上,我有一个选择,可以更改应用程序的上下文。无论如何,以前,当这个上下文被更改时,我正在执行此代码(特别是 set 方法):

'use strict';
angular.module('main').factory('lacContext', ['$route', function ($route) {
    return {
        set: function (id) {
            sessionStorage.setItem("lac-context", id);
            $route.reload();
        },
        get: function () {
            return sessionStorage.getItem("lac-context");
        }
    };
}])

$route.reload()

做了最重要的事情。它重新加载了页面。但是在切换到ui-router之后,$ route.reload什么也没做。我也没有在ui-router API中找到对应的。如何解决这个问题?

5 个答案:

答案 0 :(得分:37)

怎么样:

$state.go($state.$current, null, { reload: true });

答案 1 :(得分:8)

您可以执行$state.reload()

有一个错误,它有时不会重新实例化控制器。 你可以用

解决这个问题
$state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });

答案 2 :(得分:6)

好的,当我将$ state注入控制器时它会起作用。

但是当它像代码片段一样注入服务时,当然$ state是未定义的。

虽然

$state.go('.')

没有用,我做了这样的事情:

    $stateProvider
      .state('home', {
          controller: function ($state) {
              $state.go('advisoryLeadOffering.packages');
          }
      })
      .state('advisoryLeadOffering.packages', {
          url: "/packages",
          templateUrl: "/AdvisoryLeadOffering/Packages",
          controller: 'AdvisoryLeadOfferingPackages'
      })

当我需要重新加载时,我会做这样的事情:

$state.transitionTo('home');

内部范围的方法。

答案 3 :(得分:0)

我遇到了类似的问题,我希望控制器外部的链接刷新状态,并在控制器中创建一个reload()函数。

SomeCtrl

$scope.reload = function(){
    $state.transitionTo('myState');
}

将此添加到您的锚点:

ng-click="reload()"

H / T @dragonfly将我指向transitionTo()

答案 4 :(得分:0)

唯一对我有用的是:

创建重定向状态:

$stateProvider.state('redirect', {
    url: 'redirect/:to',
    controller: function($state, $stateParams, $scope) {
        $state.go($stateParams.to, null, {reload: true});
    }
});

转到此状态:

$state.go('redirect', {to: $state.current.name}, {reload: true});