2017-08-24 115 views
0

我有以下幾點:角路由未被捕獲的錯誤

enter image description here

我收到一個錯誤說:

compiler.es5.js:1690 Uncaught Error: Template parse errors: 
Can't bind to 'routerLink' since it isn't a known property of 'a'. ("   <div class="navbar-header"> 
       <ul class="nav navbar-nav list-inline"> 
        <li class="home"><a [ERROR ->][routerLink]="['/home']">Login</a></li> 
        <li class="child"><a [routerLink]="['/child']">Child</a>"): ng:///HomeModule/[email protected]:25 
Can't bind to 'routerLink' since it isn't a known property of 'a'. ("inline"> 
        <li class="home"><a [routerLink]="['/home']">Login</a></li> 
        <li class="child"><a [ERROR ->][routerLink]="['/child']">Child</a></li> 
        <li class="parent"><a [routerLink]="['/parent']">Parent"): ng:///HomeModule/[email protected]:26 
Can't bind to 'routerLink' since it isn't a known property of 'a'. ("</li> 
        <li class="child"><a [routerLink]="['/child']">Child</a></li> 
        <li class="parent"><a [ERROR ->][routerLink]="['/parent']">Parent</a></li> 
       </ul> 
      </div> 

但是我在app.modules.ts宣佈它

@NgModule({ 
    declarations: [], 
    imports: [ 
     RouterModule.forRoot(appRoutes), 
     BrowserModule, 
     ChildModule, 
     ParentModule, 
     HomeModule 
    ], 
    providers: [], 
    bootstrap: [HomeComponent] 
}) 
export class AppModule { } 

在我的HomeComponent.html我有標題:

<header id="header"> 
    <nav class="navbar navbar-default"> 
     <div class="container"> 
      <div class="navbar-header"> 
       <ul class="nav navbar-nav list-inline"> 
        <li class="home"><a [routerLink]="['/home']">Login</a></li> 
        <li class="child"><a [routerLink]="['/child']">Child</a></li> 
        <li class="parent"><a [routerLink]="['/parent']">Parent</a></li> 
       </ul> 
      </div> 
     </div> 
    </nav> 
</header> 

但它是說它承認屬性。

我已上載的代碼的GitHub:[GitHub的] [2]

------------更新1 -------------- -

我更新CommonModule.ts

import { NgModule } from '@angular/core'; 
import {RouterModule} from '@angular/router'; 

@NgModule({ 
    declarations: [], 
    // you don't need anything here since this module has no templates for Angular to parse! 
    imports: [RouterModule], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class CommonModule { } 

然後我導入到app.module.ts

@NgModule({ 
    declarations: [], 
    imports: [ 
     BrowserModule, 
     ChildModule, 
     ParentModule, 
     HomeModule, 
     CommonModule 
    ], 
    providers: [], 
    bootstrap: [HomeComponent] 
}) 
export class AppModule { } 

錯誤:

[2]:https://github.com/drewjocham/Routing.gitERROR

ERROR in /Users/drew/Documents/OutputInput/Sample/node_modules/@angular/common/src/common_module.d.ts (11,15): Cannot find name 'RouterModule'. 
ERROR in /Users/drew/Documents/OutputInput/Sample/node_modules/@angular/common/src/common_module.d.ts (13,9): Cannot find name 'RouterModule'. 
+0

你可以請加在你聲明HomeComponent模塊? –

+0

是否解決了此問題? –

回答

4

這是因爲HomeComponent是在Module這並不導入RouterModule聲明。 RouterLink是屬於它的指令。

要解決這個問題,您可以將RouterModule添加到HomeModule的進口數組中。

+1

如果您(OP)想要了解更多關於模塊如何在Angular中工作的內容,請查看ngConf的這個YouTube視頻:https://www.youtube.com/watch?v=ntJ-P-Cvo7o&t=1s – DeborahK

+1

其中之一我的最愛來自ng-conf,推薦給我的一些辦公室同事;) –

1

要理解這樣的錯誤,最好了解一下Angular流程模板的使用方法。基本版本如下:

  1. 角讀取所有的組件,指令和原裝進口模塊出口管道 - 例如,當您導入BrowserModule到您的AppModule,所有組件和CommonModule指令都可以被讀取,因爲BrowserModule出口CommonModule

  2. Angular讀取在當前模塊中聲明的所有組件,指令和管道。

該列表組成了Angular在掃描模板時的操作環境。這意味着,除非你宣佈你的模塊中的指令,或從另一個模塊導入後,在模塊模板兩端角時談到,它不會承認它,會給你一個錯誤,如:

燦「T綁定到‘routerLink’,因爲它不是一個已知的性質‘A’

所以,當你看到,你馬上知道,在這個模塊的背景下,routerLink指令既沒有宣佈,也沒有進口。

修復很簡單:從CommonModule導出RouterModule,以便路由指令(如routerLink)可供所有其他模塊使用。或者,您可以直接導入RouterModule

@NgModule({ 
    declarations: [], 
    // you don't need anything here since this module has no templates for Angular to parse! 
    imports: [], 
    exports: [ 
     HttpModule, CommonModule, RouterModule 
    ] 
}) 
export class CommonModule { } 

要小心,不要使用RouterModule.forRoot()因爲這是留給AppModule

+0

非常感謝您的詳細回覆。首先請參閱更新1. – Drew1208

+0

@ Drew1208,將您的CommonModule重命名爲其他內容,因爲Angular已經有了它自己的。也許'CoreModule'。接下來,您以其他方式更改您的代碼。例如,在你的'CommonModule'導入Angular自己的之前,你把它拿出來了。基本上你做了比我建議的更多的改變。我所說的是從'CommonModule'中導出'RouterModule'(它本身應該被重命名) – BeetleJuice

相關問題