为什么$ locationChangeStart在页面加载时被触发?

时间:2015-02-17 21:55:07

标签: angularjs

最近,我偶然发现了一个非常奇怪的代码,这个代码似乎正在使用这样一个事实:在某些情况下,Angular可能会在初始页面加载时触发$locationChangeStart事件。此外,next参数值将等于current值。这对我来说似乎很奇怪。

我没有找到相关的相关文档,但这里是显示这种情况的小提琴http://jsfiddle.net/tJSPt/327/

可能唯一的区别是在制作中我们使用的是手动Angular bootstrap。

任何人都可以解释或指出有关为什么在页面加载时触发该事件的可靠信息来源?这是我们不得不期待的东西,还是当前Angular实现的特殊性或我们使用它的方式?

1 个答案:

答案 0 :(得分:2)

我最近遇到过这种情况,但之所以发生这种情况,是因为我使用ui-routercontrollerAs语法。也许你也是?

我偶然发现了这个帮助我的链接:History should not be changed until after route resolvers have completed

我听了$locationChangeStart广播,但是当我进入状态而不是激动时,它就到了断点。

我通过以下方式修复了我的问题:

  1. 我听了$stateChangeStart
  2. 我必须将代码移到var vm = this;
  3. 之上

    此处的代码如下:

    // ...     
    $scope.$on('$stateChangeStart', function (event) {
            if (vm.myForm!= null && vm.myForm.$dirty) {
                if (!confirm("Are you sure you want to leave this page?")) {
                    event.preventDefault();
                }
            }
        });
    
    var vm = this;
    // vm.xxx = xxxx; .etc ...