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

xen*_*_33 6 angularjs

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

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

可能唯一的区别是在生产中我们使用手动Angular bootstrap.

任何人都可以解释或指向信任的信息来源,说明为什么在页面加载时触发了该事件?这是我们必须要做的事情,还是当前Angular实现的特殊性或我们使用它的方式?

Xae*_*ero 1

我最近经历过这种情况,但发生这种情况的原因是因为我正在使用ui-router语法controllerAs。也许你也是?

我偶然发现这个链接帮助了我:在路由解析器完成之前不应更改历史记录

我听了广播$locationChangeStart,但它在我进入状态时就断点了,而不是在兴奋时。

我通过执行以下操作修复了我的问题:

  1. 我反而听了$stateChangeStart。
  2. 我不得不移动上面的代码var vm = this;

这是我的代码如下所示:

// ...     
$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 ...
Run Code Online (Sandbox Code Playgroud)