2014-11-14 11 views
29

W Angular 2.0 nie będzie $scope.

Jaka jest alternatywa? Jak będę mógł udostępniać dane między komponentami? Czy opcja scope będzie dostępna w dyrektywach? Bardziej praktycznie, jest obecna alternatywa dla tej, którą mogę się zapoznać?

Jestem świadomy, że controller as, ale czytam, że kontrolerzy również zostaną wyeliminowani.

Zdezorientowany na taką rewolucję rozpoczął zespół Angular.

+0

Czy nie powinniśmy poczekać, aż zostanie zwolniony? Wcześniej tak naprawdę nie jest to pytanie programistyczne. Bardziej przypomina dyskusję projektową. – Thilo

+0

to pytanie wymaga zaktualizowanych odpowiedzi – Martian2049

Odpowiedz

33

Angular 2.0 używa zamiast $scope.

Jedną z głównych zmian nadchodzących w wersji 2.0 jest śmierć kontrolera i nowy nacisk na komponenty. Dużą zaletą przejścia na aplikacje oparte na składnikach jest łatwiejsze definiowanie ich interfejsów; plus, elementy HTML już mają łatwy do przypisania interfejs w zdarzeniach, atrybutach i właściwościach.

Zobacz migracja angularjs 1.3 do 2,0here. zobaczyć również kompletną dokumentację kątowa 2,0here

3

Nie martwię się w ogóle o wersję 2.0. Kątowa zespół stwierdził, że:

It's too soon to start building anything with 2.0 code -- we're still in the very early stages of building out the project.

Próbując dowiedzieć się czegoś, co jest tak wcześnie w rozwoju mogą w dużej mierze skończyć się ogromna strata czasu. W związku z powyższym, jeśli chcesz rozpocząć skakanie w Angular 2.0, nowy router, który został wprowadzony w wersji 1.3, jest - od teraz - routerem, którego zamierzają użyć do 2.0

+6

Zostało to napisane w 2014 r. I nie jest już tak ważne. Jeśli tworzysz z Angular 1.x, zdecydowanie powinieneś próbować używać przynajmniej Angular 1.5, gdzie wprowadzono metodę angle.component. –

5

Używanie sposób na przyzwyczajenie się do pracy bez $scope, chociaż nadal będziesz potrzebować $scope dla kilku rzeczy, takich jak obserwatorzy i wydarzenia. Kontrolery nie są tak naprawdę usuwane w Angular 2.0. Ale nie będzie odpowiednika ng-controller. Zamiast kontrolerów i widoków będziesz miał tylko dyrektywy, które w gruncie rzeczy zawierają kontroler i widok.

+1

Możesz podać cytat lub jeszcze lepiej link do miejsca, w którym to znalazłeś? – jasonszhao

+1

@jasonszhao Igor i Misko mówią o tym w Angular Air wokół znaku 52:00 minut. http://youtu.be/LG9VkCDbte0?t=51m43s. Inne dobre źródła to filmy z ng-europe lub bloga Rob Eisenbergs http://eisenbergeffect.bluespire.com/all-about-angular-2-0/. Możesz wyszukać "kontroler jako", aby zobaczyć, gdzie on o nim mówi: – rob

+1

czy to będzie jak polimer? – Bargitta

3

kątowa 2 nie udostępniać danych pomiędzy komponentami jak kątowa 1 zrobił. Zamiast tego, to, co robią, to przekazywanie danych przez użycie ich w szablonie i przekazywanie zdarzeń (po prostu za pomocą zachowania bąbelkowego, które domyślnie mają zdarzenia). A ty uzyskujesz dostęp do danych z wzorca za pomocą klasy komponentów (Obejrzyj filmy 1000000000 "kątowe 2 - Jak zacząć" na Youtube, jeśli nie masz pojęcia, co mam na myśli przez klasę).

13

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.

+1

To jest niesamowity sposób na zrobienie tego. Używałem Input i wstrzykiwanie dostawcy do komponentu nadrzędnego, a następnie za pomocą Input, aby dodać tę jedną instancję dostawcy do 2 komponentów podrzędnych –

+0

Dzięki. Usługa współdzielona może być również dzielona między niespokrewnione komponenty, przekazując ją do danych wejściowych tylko działa dla bezpośrednich dzieci. –