2016-07-14 6 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

вы можете использовать Сервис для передачи данных между контроллером или можете использовать 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

Как я могу вызвать getCount() из HeaderCtrl? Нужно ли обновлять его? –

+0

да, я могу ввести его и вызвать myService.getCount(). Но мне нужно вызвать эту функцию в headerCtrl, когда продукт добавлен в cartCtrl. Итак, как я могу вызвать звонок? –

+0

emit будет работать в случае параллельного контроллера, поскольку он будет излучать родительский контроллер, только я думаю? –

1

Я предполагаю, что есть два вопроса здесь нужно заняться 1. Один из них - это доля данных: это может быть достигнуто за счет службы 2. Другое - это автоматическое обновление в контроллере назначения, т.е. без вызова get. Для этого использования угловой broadcast

+0

Broadcast будет работать с параллельным контроллером, поскольку, по-моему, трансляция запускает событие только для дочернего контроллера? –

+0

Я предполагаю, что это не имеет значения. Трансляция - это путь pub-sub в угловом – npr

+0

спасибо большое :) –

Смежные вопросы