2016-07-06 14 views
18

próbował przejść na nowy router, jak w wersji "@ kątowy/router": "3.0.0-beta.2" w połączeniu z "@ kątowy/*": "2.0.0-rc.4", po oficjalnych dokumentach na ComponentRouter.Router Angular2: Nie można znaleźć gniazda głównego, aby załadować "HomeComponent"

Jednak jestem w obliczu problemu, gdy próbuje załadować moją aplikację z domyślnym HomeComponent:

Cannot find primary outlet to load 'HomeComponent' 

Wygląda na to, że ma to związek z użyciem templateUrl i zewnętrznego pliku HTML, zamiast przy użyciu szablonu inline styl.

HomeComponent początkowo nie jest wyświetlany w oknie, a błąd jest drukowany na konsoli. Jednak gdy użyję linku do komponentu domowego, zostanie wyświetlony komunikat z drugiej ręki.

Jak tylko zmieni się z

templateUrl: 'home.html' 

do

template: '<router-outlet></router-outlet>' 

błędu nie ma, HomeComponent przedstawiono i routing działa zgodnie z oczekiwaniami.

Czy to znany problem? Czy to działa dla kogoś korzystającego z templateUrl? Czy jest coś, co muszę szanować, aby to działało?

+0

Czy możesz pokazać metadane komponentu dla komponentu domowego, wygląda to tak, jakbyś podawał względny adres URL, ale nie ustawiał modułu id. moduleId: module.id. http://blog.thoughtram.io/angular/2016/06/08/component-relative-paths-in-angular-2.html –

+0

Na pewno mogę: '@Component ({ selektor:" aplikacja ", dyrektywy [ROUTER_DIRECTIVES] templateUrl: '/app/components/app/app.html' }) 'i '@Component ({ selektora: 'start.home' wytyczne: [], templateUrl: '/app/components/start/page.home.html' }) 'tak, że nie powinno to być problemem –

+0

URL szablonu działa. To jest pewien problem z konfiguracją, czy jesteś pewny, że dodałeś dyrektywę routera i gniazda routera w odpowiednim miejscu. Podaj plunkera –

Odpowiedz

27

Problem polegał na tym, że ze względu na ekran ładowania aplikacji urządzenie <router-outlet></router-outlet> jeszcze nie istniało z powodu warunków wyścigu. Jeśli chcesz ukryć część html zawierającą gniazdo, użyj [hidden] zamiast *ngIf, aby upewnić się, że gniazdko znajduje się zawsze w DOM i nie jest usuwane warunkowo.