2016-07-14 74 views
0

我有两个并行控制器headerCtrl和cartCtrl。当我从cartCtrl添加产品时,我想反映headerCtrl中的计数增加。达到此目的的最佳方法是什么?角度Js控制器之间的数据共享

我知道使用共享服务,我们可以做到这一点:当得到了增加了产品更新服务计数。但我怎么能更新headerCtrl中的计数?

此外,如果有任何其他实现这一目标的最佳途径?

+0

请添加一些代码 –

+0

可能重复[在控制器之间传递数据在Angular JS?](http://stackoverflow.com/questions/20181323/passing-data-between-controllers-in-angular -js) – Chanthu

+0

您可以使用Service在控制器之间传递数据,也可以使用rootScope –

回答

3

我通常会使用服务控制器之间的数据共享。所以你创建一个像下面这样的服务,并从两个控制器访问/修改它。要通知其他组件,您可以使用$ rootScope。$ emit来传递数据。如果您不需要将事件传播到所有子范围,这通常比$ broadcast更有效。这是一个快速的方法来做到这一点 - 但你可能会很快结束了在每一个组件依赖于$ rootScope,另一种是通过服务建立了听众的情况:Why do we use $rootScope.$broadcast in AngularJS?

angular.module('app').service('myService', function($rootScope) { 
var count = 0; 

this.increaseCount = function() { 
    count++; 
    $rootScope.$emit('countUpdated', count); 
} 

this.getCount = function() { 
    return count; 
} 
}); 

angular.module('app').controller('HeaderCtrl', ['$rootScope', function($rootScope) { 

    $rootScope.$on('countUpdated', function(count) { 
    // do your stuff 
    }); 
}]) 
+0

如何从HeaderCtrl调用getCount()?我需要刷新它吗? –

+0

是的我可以注入它并调用myService.getCount()。但是当产品被添加到cartCtrl中时,我需要在headerCtrl中调用此函数。那么我将如何触发此通话? –

+0

发射将在并行控制器的情况下工作,因为它只会发射到父控制器我认为? –

1

我想有两个问题这里要解决的问题 1.一个是数据共享:这可以通过服务来实现 2.另一个是在目标控制器处自动更新,即不调用get。对于这种使用角度broadcast

+0

广播将与并行控制器一起工作,因为我认为广播只将事件发送给子控制器? –

+0

林猜测它应该没关系。广播是一种方式的酒吧在角 – npr

+0

非常感谢:) –

相关问题