2017-04-05 158 views
0

我有一个应用程序,其中使用3个广播,例如broadcast1,broadcast2和broadcast3。

broadcast3如果broadcast1和broadcast2之前 broadcast3都没有播出工作正常。

但是,如果广播3被触发之后广播1和广播2被触发,则广播3被连续触发两次。

请注意我在$ rootscope广播每隔广播和接收他们$范围。在所有情况下,广播从父母到孩子发生。

请帮我避免这种连续两次播出

+0

可以粘贴你的代码片段?广播1和广播2的价值很可能与广播3相冲突 –

+0

可以请分享代码片段以获取更多详细信息。 –

+0

应用程序紧密耦合,我无法分离代码并在此处提供。但它可能被认为是每个点击都有三个按钮和三个广播。 –

回答

0

有许多建议为你的问题:

使用$ rootScope $发出()而不是$播出() - 当你在rootScope播出,事件被汇总到当前存在的每个范围。这可能会减慢应用程序。如果您的听众与rootScope挂钩,则没有必要这么做。

当Controller被销毁时,不要忘记清理$ rootScope。$ on()侦听器。大多数人不这样做,这会导致内存泄漏:

var listenerCleanFn = $rootScope.$on('ev', cb); 
 

 
$scope.$on('$destroy', function() { 
 
    listenerCleanFn(); 
 
});

+0

但我没有收到rootScope上的广播。我收到它的控制器范围。我希望'$ destroy'只会在控制器的销毁中被调用。但是,在这种情况下,所有的控制器都应该生效。 –

+0

3rd广播是从父母到孩子,其中$ emit不起作用 –