2015-02-17 74 views
4

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

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

大概是唯一的区别是,在生产中,我们使用手动角引导小提琴。

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

+0

你有没有试过[文档](https://docs.angularjs.org/api/纳克/服务/ $位置#$ locationChangeStart)? – Mosho 2015-02-17 23:21:52

+0

此评论有何意义?这个问题显然与文档相反 - 为什么在页面加载时我收到通常在用户即将离开页面时触发的事件?在其他条件下(即使用ng-app),该事件不存在 – 2015-02-18 07:50:49

回答

1

我最近经历过这个,但是它发生的原因是因为我正在使用ui-routercontrollerAs语法。也许你也是?

我偶然发现了这个链接,帮我摆脱困境:History should not be changed until after route resolvers have completed

我听了$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 ... 
相关问题