以下angular + ui-router app:
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
的孩子。
点击“转到路线1”和“转到路线2”只会在按预期将状态更改为route2
(打开控制台以查看)时触发控制器2的运行。
但是,我的应用需要在route1
中更改一些网址参数(例如,当用户拖动地图时,我们想要更改网址以反映网址中的坐标),但是什么都不应该发生。签出ui-router docs,以下内容用于更改网址参数:
$state.go('route1', {x: p}, {notify: false, location:'replace'})
这很有效(用于更改网址)。
但是,使用此技术后,使用$state.go('route2')
触发器route1
的控制器重新加载!尝试点击“设置x到123”然后点击演示中的“转到路线2”。
如何阻止重新加载route1
的控制器?
任何帮助将不胜感激!
使用的版本:
答案 0 :(得分:2)
尝试在状态配置中添加此内容
reloadOnSearch: false
并在需要更新网址时调用以下函数
$location.search( { param: value } );
url应该能够在不重新加载的情况下进行更新
希望这会有所帮助