W Angular2 używać wspólnych usług zamiast $scope
https://angular.io/docs/ts/latest/cookbook/component-communication.html
@Injectable()
class SharedService {
someState:String;
someEventStream:Subject<String> = new Subject<String>();
}
@Component({
selector: ...,
providers: [SharedService]
})
class MyComponent {
constructor(private sharedService:SharedService) {}
}
Dla każdego dostawcy ([SharedService]
jest skrótem [{provide: SharedService, useClass: SharedService}]
) w powyższym przykładzie pojedyncza instancja jest zachowana.
Zakres takiego dostawcy jest komponentem, w którym został dostarczony, a jego potomkami jest, gdy żaden z potomków nie ma zarejestrowanego tego samego dostawcy.
Gdy komponent zażąda zależności constructor(private sharedService:SharedService)
, Angulars DI (wtrysk zależności) rozpoczyna przeglądanie składników własnych dostawców, a następnie w górę w kierunku składnika głównego, a następnie dostawców zarejestrowanych podczas ładowania początkowego. Zwraca pierwszą znalezioną.
Jeśli dwa komponenty otrzymały tę samą instancję (od tego samego dostawcy), które zostały wstrzyknięte, mogą komunikować się za pomocą tej usługi, subskrybując i emitując zdarzenia o numerze Subject
lub odczytując i zapisując stan lub wywołując metody w usłudze.
Czy nie powinniśmy poczekać, aż zostanie zwolniony? Wcześniej tak naprawdę nie jest to pytanie programistyczne. Bardziej przypomina dyskusję projektową. – Thilo
to pytanie wymaga zaktualizowanych odpowiedzi – Martian2049