在使用params更改状态后,防止ui-router状态控制器重新加载

时间:2015-11-27 08:45:40

标签: angularjs angular-ui-router

以下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"];
        }
    })

})

...有两个州,route1route2,是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的控制器?

任何帮助将不胜感激!

使用的版本:

  • angular 1.2.4
  • ui-router 0.2.15

1 个答案:

答案 0 :(得分:2)

尝试在状态配置中添加此内容

reloadOnSearch: false

并在需要更新网址时调用以下函数

$location.search( { param: value } );

url应该能够在不重新加载的情况下进行更新

希望这会有所帮助