【发布时间】:2016-03-01 10:07:15
【问题描述】:
以下 angular + ui-router 应用:
var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){
// For any unmatched url, send to /route1
$urlRouterProvider.otherwise("/route1");
$stateProvider
.state("route1", {
url: "/route1?x",
templateUrl: "route1.html",
controller: function($scope, $state){
console.log("route 1");
$scope.setUrlParam = function(p) {
console.log("set x", p);
$state.go('route1', {x: p}, {notify: false, location:'replace'})
}
}
})
.state('route2', {
parent: "route1",
url: "/route2",
templateUrl: "route2.html",
controller: function($scope){
console.log("route 2");
$scope.items = ["A", "List", "Of", "Items"];
}
})
})
...有两个状态,route1 和 route2,它是 route1 的子级。
- Plunker:http://plnkr.co/edit/3P9ZE1HvSgK24B1MrIf4?p=preview
- 点击“实时预览”并在您的开发工具中打开控制台面板。
点击“Goto route 1”和“Goto route 2”只会在将状态更改为route2(打开控制台查看)时按预期触发Controller 2的运行。
但是,我的应用需要在各种情况下更改route1 中的一些url 参数(例如,当用户拖动地图时,我们希望更改url 以反映url 中的坐标),但没有别的应该发生。签出ui-router docs,以下用于更改url参数:
$state.go('route1', {x: p}, {notify: false, location:'replace'})
这很好用(用于更改网址)。
但是,在使用这种技术之后,使用$state.go('route2') 会触发route1 的控制器重新加载!尝试在演示中点击“set x to 123”,然后点击“goto route 2”。
如何防止重新加载route1 的控制器?
任何帮助将不胜感激!
使用的版本:
- 角1.2.4
- ui-router 0.2.15
【问题讨论】:
-
如果您想在不重新加载应用的情况下更改 url,请尝试 $location 服务。
标签: angularjs angular-ui-router