目前我正在做这样的事情
link.on('click', function () {
if (link.attr('href') !== $route.current.originalPath)
return;
$route.reload();
});
我不知道副作用,但我想可能会有一些副作用。
有没有更直接的方法来处理ngRoute,例如通过$location
?
当应用程序更新为使用它时,在UI路由器中执行相同操作的方法是什么?
答案 0 :(得分:7)
使用UI-Router我们有一组选项,其中一个是 {reload: true}
location - {boolean=true|string=}
- 如果为true将更新位置栏中的网址,如果为false则不会。如果是字符串,必须是“替换”, 这将更新网址并替换上次历史记录。inherit - {boolean=true},
如果为true,则会从当前网址继承网址参数。relative - {object=$state.$current}
,当使用相对路径(例如'^')进行转换时,定义哪个状态是相对的。notify - {boolean=true}
,如果为true,则会广播$ stateChangeStart和$ stateChangeSuccess事件。reload (v0.2.5) - {boolean=false},
如果为true,即使状态或参数没有改变也会强制转换,也就是重新加载 州。它与reloadOnSearch不同,因为你在使用它时会使用它 想要在一切都相同时强制重新加载,包括搜索 PARAMS。
所以我们可以强制状态重新加载:
$state.go("stateName", stateParams, {reload: true});
答案 1 :(得分:1)
您的代码可以转换为低于更改$route.reload()
至$state.reload()
<强>代码强>
link.on('click', function () {
if (link.attr('href') !== $route.current.originalPath)
return;
//though this will not reload the controller content
$state.reload(); //will force to reload state..
$scope.$apply(); //needed here to tell angular js to run digest cycle.
});
从git-hub issue开始,似乎$state.reload()
重新加载状态,但控制器没有重新实例化。为此,您需要使用下面的代码而不是$state.reload()
$state.transitionTo('tab.locations', $state.$current.params, {
reload: true, inherit: true, notify: true
});
答案 2 :(得分:1)
我发现这是UI路由器的最短路径:
$state.go($state.current, {}, {reload: true});
或者你可以这样做:
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
答案 3 :(得分:0)
如果您使用 Ui.Router :
link.on('click', function (event) {
if (link.attr('href') !== $route.current.originalPath)
return;
event.preventDefault();
return $scope.$apply(function() {
return $state.reload(); // $state.go($state.current.name, $stateParams, { inherit: false, reload: true, notify: true });
});
});
&#13;
如果您使用简单的 ngRoute ,则必须从templateCache中删除currentTemplate,并在$ timout中返回$ route.reload()!