【问题标题】:$route.reload() does not work with ui-router$route.reload() 不适用于 ui-router
【发布时间】:2015-08-27 13:15:22
【问题描述】:

我已切换到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 中找到对应的。如何解决这个问题?

【问题讨论】:

  • 你试过$state.go('.')吗?
  • 不。如何访问当前状态?
  • 你需要像$route一样注入$state服务,然后你可以调用这个方法。请参阅文档github.com/angular-ui/ui-router/wiki/…
  • 我做到了,$state 未定义
  • 如果您在模块中正确注入了 ui-router 依赖项,您将获得 $state 对象。请参阅此 wiki 链接和示例github.com/angular-ui/ui-router/wiki

标签: angularjs angular-ui-router


【解决方案1】:

怎么样:

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

【讨论】:

  • 不应该是$state.go($state.current, null, { reload: true }); ?
【解决方案2】:

你可以$state.reload()

有时无法重新实例化控制器存在错误。 你可以解决这个问题

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

【讨论】:

    【解决方案3】:

    好的,当我将 $state 注入控制器时它可以工作。

    但是当将它注入到像代码 sn-p 这样的服务中时,当然 $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');
    

    在作用域的方法内。

    【讨论】:

      【解决方案4】:

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

      SomeCtrl:

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

      将此添加到您的锚点:

      ng-click="reload()"
      

      H/T @dragonfly 指点我transitionTo()。

      【讨论】:

        【解决方案5】:

        唯一对我有用的东西:

        创建重定向状态:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 2014-12-22
          • 1970-01-01
          • 2017-02-26
          • 1970-01-01
          • 2017-04-22
          • 1970-01-01
          相关资源
          最近更新 更多