방금 새 라우팅 라이브러리 (@ angular / router v3.0.0-alpha.7)를 사용하기 시작했지만 공식 문서를 따르면 아래 오류가 발생합니다.
browser_adapter.ts:74: EXCEPTION: Error: Uncaught (in promise): Error: Cannot find primary outlet to load 'HomePage'
질문은-어떻게 오류를 제거하고 라우터가 예상대로 작동하도록합니까? 설정을 놓친 적이 있습니까?
(alpha.6 버전을 사용할 때도 동일한 오류가 나타납니다.)
app.component.ts
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';
@Component({
selector: 'app',
template: `
<p>Angular 2 is running...</p>
<!-- Routed views go here -->
<router-outlet></router-outlet>
`,
providers: [ROUTER_DIRECTIVES]
})
export class AppComponent {
}
app.routes.ts
import { provideRouter, RouterConfig } from '@angular/router';
import { HomePage } from './pages/home/home';
export const routes: RouterConfig = [
{ path: '', component: HomePage }
];
export const APP_ROUTER_PROVIDERS = [
provideRouter(routes)
];
home.ts
import { Component } from '@angular/core';
@Component({
template: '<h1>Home Page</h1>'
})
export class HomePage {
}
main.ts
/* Avoid: 'error TS2304: Cannot find name <type>' during compilation */
///<reference path="../../typings/index.d.ts" />
import { bootstrap } from "@angular/platform-browser-dynamic";
import { APP_ROUTER_PROVIDERS } from './app.routes';
import { AppComponent } from "./app.component";
bootstrap(AppComponent, [
APP_ROUTER_PROVIDERS,
]).catch(err => console.error(err));
답변
app.component.ts
Provider 배열에서 지시문을 선언 한 것처럼 Looks에 오류가 있습니다 .
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';
@Component({
selector: 'app',
template: `
<p>Angular 2 is running...</p>
<!-- Routed views go here -->
<router-outlet></router-outlet>
`,
directives: [ROUTER_DIRECTIVES] //here
})
export class AppComponent {
}
답변
@JS_astronauts가 이미 해결책을 제공했지만 오류를 설명하는 것이 유익하다고 생각합니다.
기본 콘센트는 Angular가 HTML 템플릿을 구문 분석하고 RouterOutlet 지시문을 찾을 때 설정됩니다 . 즉, RouterOutlet의 선택기 :를 찾을 때 <router-outlet></router-outlet>
입니다.
템플릿에는 포함되어 있지만 <router-outlet></router-outlet>
구성 요소에는이 포함되어 있지 않으므로 directives: [ROUTER_DIRECTIVES]
Angular는 해당 상수로 정의 된 지시문을 찾지 않습니다.
export const ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref,
RouterLinkActive];
따라서 Angular가 AppComponent의 HTML 템플릿을 구문 분석 할 때 인식하지 못하면 <router-outlet></router-outlet>
무시합니다. 나중에 Angular가 기본 경로 구성 요소 (HomePage)를 렌더링하려고하면 어디에 놓을 지 모르기 때문에 불평합니다.
이 오류는 요소 선택기에 오타가있는 경우에도 발생할 수 있습니다. 예 :
<roter-outlet></roter-outlet>
이 경우 directives
배열이 올바르게 설정되어 있어도 Angular는 필요한 <router-outlet>
요소를 찾지 못합니다 .
답변
directives metadata
대신 이어야합니다 providers
.
directives: [ROUTER_DIRECTIVES]
답변
이 오류가 무작위로 발생하며 라이브 서버에 게시 할 때만 발생합니다. 나는 현지에서 일할 때 이것을 경험 한 적이 없습니다. 내가 무작위로 말하면 때로는 잘 작동합니다. 예를 들어 새로 고침하면 위에서 언급 한 오류가 발생하고 화면에 기호가 표시됩니다. Angular 2에서 작업 중입니다.
모든 안내 / 도움을 주시면 감사하겠습니다.