【问题标题】:Preventing ui-router state controller reload after changing state with params使用参数更改状态后防止 ui-router 状态控制器重新加载
【发布时间】: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"];
        }
    })

})

...有两个状态,route1route2,它是 route1 的子级。

点击“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


【解决方案1】:

尝试将其添加到您的状态配置中

reloadOnSearch: false

当你想更新 url 时调用下面的函数

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

url 应该可以在不重新加载的情况下更新

希望对你有帮助

【讨论】:

  • reloadOnSearch: false 就够了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2016-12-10
  • 1970-01-01
相关资源
最近更新 更多