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

dra*_*fly 8 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");
        }
    };
}])
Run Code Online (Sandbox Code Playgroud)

和

$route.reload()
Run Code Online (Sandbox Code Playgroud)

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

dev*_*ave 37

怎么样:

$state.go($state.$current, null, { reload: true });
Run Code Online (Sandbox Code Playgroud)


Wil*_*ern 8

你可以做 $state.reload()

它有一个错误,有时不会重新实例化控制器.你可以解决这个问题

$state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });
Run Code Online (Sandbox Code Playgroud)


dra*_*fly 6

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

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

虽然

$state.go('.')
Run Code Online (Sandbox Code Playgroud)

不起作用,我做了这样的事情:

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

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

$state.transitionTo('home');
Run Code Online (Sandbox Code Playgroud)

内部范围的方法.