如何在不重新加载视图的情况下更新参数?

时间:2014-05-08 10:44:45

标签: angularjs angular-ui

我一直在尝试这样做。我想改变状态,因为我的参数已经改变,但我的状态没有任何改变,所以我不想重新加载视图。它很贵,而且会引起闪光。我真的只想得到一个$stateParams已经发生变化的事件,然后继续。

我能弄清楚如何更新params的唯一方法是:

$state.go($state.current, {param: value});

这有效(codepen),除了我的控制器/视图被重新加载。再一次,我不想要那个。

我想出了一个黑客,但我不喜欢它。首先,我需要告诉它不要通知:

$state.go($state.current, {param, value}, {notify: false});

我可以尝试关注$stateParams上的更改,但这种变化永远不会发生。相反,我创建了一个全局控制器,它将$stateParams附加到$rootScope。然后,从我的视图控制器,$watch可以$scope.$stateParams进行更改。

这有效(codepen),但它确实非常混乱。似乎必须有更好的方法来解决这个问题,但我无法找到更好的方法。

思想?

1 个答案:

答案 0 :(得分:1)

你怎么看$ $ $ location.search()呢?

Codepen fork:http://codepen.io/anon/pen/mbsgr

更新了$ watch功能:

      $scope.$watch(function() {
        return $location.search();
      }, function(newValue, oldValue) {
        if(newValue != oldValue) {
          alert('act on state param change');
        }
      });