AngularJS komunikacja pomiedzy kontrolerami

0

Witam Wszystkich!
Mam pewien problem z Angularem. otóż pisząc aplikację mam stworzony jeden modul, a w nim dwa kontrolery (w osobnych plikach). Jeden z kontrolerów odpowiada za operacje na danych klietnów, drugi zaś obsługuje zgłoszenia serwisowe.
W uproszczeniu wygląda to tak:

var app = angular.module('myApp', []); 1 kontroler app.controller('ngCustomersCtrl', function($scope, $http){}); 2 kontroler app.controller('ngOrdersCtrl', function($scope, $http){});

Doszło do takiego momentu, kiedy to potrzebuję przekazać dane z jednego kontrolera do drugiego. Dokładnie mówiąc z kontrolera ngCustomersCtrl do ngOrdersCtrl. Bardzo proszę o pomoc.
Z góry dziękuję za zainteresowanie.
Pozdrawiam,
Michał.

2

Jest dosyć dużo instrukcji na stackoverflow w jaki sposób można komunikować się pomiędzy kontrolerami. Ja zwykle mam główny kontroler, który nazywam np. mainCtrl albo parentCtrl, który obejmuje znacznik "body" i zawsze jest rodzicem innych kontrolerów, służy do zarządzania eventami. Do wysyłania eventów służą 2 funkcje: "$emit" oraz "$broadcast". $emit wysyła event "w górę", czyli do kontrolera obejmującego kontroler z którego wysyłany jest event. $broadcast natomiast wysyła event "w dół":
title

Kontroler wysyłający dane wywołuje funkcję:

 $scope.$emit('nazwa-up', function () {
                return "dane";
            });

Kontroler główny odbiera dane i wysyła je do odbiorcy (funkcja $on służy do odbierania eventów):

 $scope.$on('nazwa-up', function (event, args) {
                $scope.$broadcast('nazwa-down', args);
            });

Kontroler, który ma odebrać dane:

 $scope.$on('nazwa-down', function (event, args) {
               
            });

Oczywiście jeśli twoje kontrolery są już w relacji "rodzic-dziecko", możesz nie używać dodatkowego kontrolera i wysyłać dane bezpośrednio z jednego kontrolera do drugiego, przy użyciu funkcji $broadcast i $emit.

1 użytkowników online, w tym zalogowanych: 0, gości: 1