Angular2 Router错误:找不到主插座以加载“ HomePage”


79

我刚刚开始使用新的路由库(@ 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 {
}

主要

/* 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));

1
由于缺少模板,我遇到了相同的错误。'<router-outlet></router-outlet>'这也可能是由于拼写错误所致'<router-outlet></router-outlet>'
Rajiv Bhardwaj

Answers:


72

您在app.component.ts 外观上有一个错误,就像您在providers数组中声明了一条指令一样。

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 {
}

3
我添加的错误得到解决<router-outlet></router-outlet>。即使我没有directives: [ROUTER_DIRECTIVES]@Component部分,也不会出现错误 。
拉吉夫·布哈德瓦伊

1
ROUTER_DIRECTIVES与角度2不再
docs/ts/

86

尽管@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>元素。


只是对使用更高版本的用户的说明:@Component的'directives'属性已在RC6中删除。 stackoverflow.com/questions/39658186/...
威尔

在您的元素选择器中输入错误:或者如果您的模板完全缺少标记...
Joshua Drake

1
另一个注意事项:如果要复制和粘贴,则应显示<router-outlet></router-outlet>。它缺少u开始和结束标记
ntgCleaner

可耻的是,从轮换员到router回者的修正没有最小化字符更改要求
陆续

7

应该directives metadata不是providers

directives: [ROUTER_DIRECTIVES]

1

仅当我在实时服务器上发布时,我才随机遇到此错误。我在本地工作时从未经历过这种情况。当我随意说时,有时工作得很好,例如,当我刷新时,它会抛出上述错误并仅在屏幕上显示符号。我正在研究Angular 2。

任何指导/帮助将不胜感激。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.