我有两个并行控制器headerCtrl和cartCtrl。当我从cartCtrl添加产品时,我想反映headerCtrl中的计数增加。达到此目的的最佳方法是什么?角度Js控制器之间的数据共享
我知道使用共享服务,我们可以做到这一点:当得到了增加了产品更新服务计数。但我怎么能更新headerCtrl中的计数?
此外,如果有任何其他实现这一目标的最佳途径?
我有两个并行控制器headerCtrl和cartCtrl。当我从cartCtrl添加产品时,我想反映headerCtrl中的计数增加。达到此目的的最佳方法是什么?角度Js控制器之间的数据共享
我知道使用共享服务,我们可以做到这一点:当得到了增加了产品更新服务计数。但我怎么能更新headerCtrl中的计数?
此外,如果有任何其他实现这一目标的最佳途径?
我通常会使用服务控制器之间的数据共享。所以你创建一个像下面这样的服务,并从两个控制器访问/修改它。要通知其他组件,您可以使用$ 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
});
}])
如何从HeaderCtrl调用getCount()?我需要刷新它吗? –
是的我可以注入它并调用myService.getCount()。但是当产品被添加到cartCtrl中时,我需要在headerCtrl中调用此函数。那么我将如何触发此通话? –
发射将在并行控制器的情况下工作,因为它只会发射到父控制器我认为? –
请添加一些代码 –
可能重复[在控制器之间传递数据在Angular JS?](http://stackoverflow.com/questions/20181323/passing-data-between-controllers-in-angular -js) – Chanthu
您可以使用Service在控制器之间传递数据,也可以使用rootScope –