2014-12-01 48 views
0

我有一个控制器(说主控制器)控制主页,也维护所有事件侦听器,像$locationChangeSuccess听AngularJS控制器初始化事件外

我有在引用了几个控制器使用ng-include包含在主页中的部分。这包含了一些自定义路由逻辑,可以让我决定加载哪个部分。这也相应地改变了URL。

我可以使用$locationChangeSuccess事件收听位置更改。但是,这并不能保证与通过ng-include加载的部分对应的控制器已经被初始化。

我知道我们可以在$scope上使用$viewContentLoaded这部分的控制器。但是,我必须避免将任何事件监听器放在主控制器之外。有没有办法实现这一点?

回答

0

您可以设置一个像$ scope这样的标志。$ parent.inited = true;作为子控制器的第一行,然后在主控制器中$ scope.inited = false;您可以使用手表检查该标志并在完成后调用某些功能,然后在点击其他子状态时将其设置为false等等。

+0

谢谢@Santiago。理想情况下,我想让子控制器免受任何锅炉板代码的影响,例如'$ scope。$ parent.inited = true'。主控制器是否有其他方式检测到位置更改后的页面加载已完全完成? – 2014-12-01 21:58:57

+0

你可以从你的子控制器发出和发出事件,并像你从主控制器那样收听 – 2014-12-02 14:39:19

+0

我想避免任何事件相关的逻辑进入子控制器。顺便说一句,我能弄清楚从主控制器收听'$ includeContentLoaded'解决了我的问题。 – 2014-12-03 04:13:34