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