RouterLink가 작동하지 않습니다


117

angular2 앱의 내 라우팅이 잘 작동합니다. 하지만 난에 따라 일부 routeLink를 만들려고하고 :

내 경로는 다음과 같습니다.

const routes: RouterConfig = [
    { path:'home' , component: FormComponent  },
    { path:'about', component: AboutComponent },
    { path:'**'   , component: FormComponent  }
];

그리고 내가 만든 링크는 다음과 같습니다.

<ul class="nav navbar-nav item">
                    <li>
                        <a routerLink='/home' routerLinkActive="active">Home</a>
                    </li>
                    <li>
                        <a routerLink='/about' routerLinkActive="active">About this</a>
                    </li>
</ul>

나는 그들을 클릭하면 존경받는 구성 요소로 이동하지만 아무것도 수행하지 않을 것으로 예상합니다.


시도해 주 [routerLink]='[/home']시겠습니까? 사용중인 Angular2 버전 및 라우터 버전은 무엇입니까?
Günter Zöchbauer

작동하지 않습니다. 당신의 qutations의 장소에 대해 확신합니까 ?? angular2의 마지막 버전을 사용하고있는 것 같지만 확인하는 방법을 모르겠습니다. 나는 ng new으로 생성했습니다 . 업데이트해야합니다
Jeff

2
죄송합니다.[routerLink]="['/home']"
Günter Zöchbauer

2
directives: [ROUTER_DIRECTIVES],구성 요소의 메타 데이터 에 추가 하는 것을 잊었을 수 있습니다 . 그것 없이는 Angular는 routerLinks 를 구문 분석하는 것을 알 수 없습니다 .
Mark Rajcok 2016-08-08

답변:


321

당신이 보여주는 코드는 절대적으로 정확합니다.

귀하의 문제는이 템플릿을 사용하는 모듈로 RouterModule (RouterLink가 선언 된 위치)을 가져 오지 않는다는 것입니다.

비슷한 문제가 있었고이 단계가 문서에 언급되어 있지 않기 때문에 해결하는 데 시간이 좀 걸렸습니다.

따라서이 템플릿으로 구성 요소를 선언하는 모듈로 이동하여 다음을 추가합니다.

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

그런 다음 모듈 가져 오기에 추가하십시오.

@NgModule({
  imports: [
    CommonModule,
    RouterModule
  ],
  declarations: [MyTemplatesComponent]
})
export class MyTemplatesModule { }

올바른 import 문과 함께 해당 routerLink가 <router-outlet></router-outlet>요소에 표시 될 위치가 필요합니다. 따라서 라우터가 해당 데이터를 표시 할 위치를 알 수 있도록 HTML 마크 업 어딘가에 배치해야합니다.


1
나는 그렇게 생각했고 그렇다 – 당신은 내 경우에도 절대적으로 옳다!
Dhananjay

1
내 수입품에 Router 모듈을 추가하면 트릭이 생겼습니다. 감사합니다!
ENDEESA

1
나를 위해 작동합니다. 감사합니다!
TheBosti

20

아래에 템플릿에 추가하는 것을 잊지 마십시오.

<router-outlet></router-outlet>

9

다음과 같이 링크를 변경해보십시오.

  <ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this</a>
    </li>
  </ul>

또한 index.html 헤더에 다음을 추가하십시오.

<base href="https://stackoverflow.com/">


5

mroe 정보를 위해 이와 같이 사용하십시오이 주제를 읽으십시오

<a [routerLink]="['/about']">About this</a>

7
귀하의 링크에 따르면, 자신은 routerLink;-) 작동합니다
귄터 Zöchbauer

이것은 "@angular/router": "~3.4.0". 건배!
mikeym dec.

2
예, 대괄호 표기법이 작동하지만 (특정 목적으로 유효한 구문 임)이 질문에 대한 해결책은 아닙니다.
isherwood

1

링크가 잘못되었습니다. 다음을 수행해야합니다.

<ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this
        </a>
    </li>
</ul>

튜토리얼을 읽을 수 있습니다.


1
대괄호 표기법은 다른 용도로 사용되며이 문제를 해결하지 못합니다.
isherwood

이거였다! <a [routerLink]="['/home']" routerLinkActive="active"> 홈 </a> <li> 태그에 routerLinkActive를 넣도록하는 튜토리얼을 따랐습니다. <a 태그에 넣으면 이제 작동합니다! 많은 감사합니다 !!!! 이것은 훌륭합니다!
Rich P

BTW, 다른 모든 태그 / 제안 요소가 이미 제자리에 있습니다. 이제이 기능이 작동합니다 (일종). 다른 행을 선택할 때 선택한 행의 값이 전달되지만 (URL에 표시됨) 첫 번째 행만 렌더링된다는 것을 알기 때문에 나머지 자습서를 따라야합니다. 그러나 그것은 또 다른 주제가 될 것입니다. 이 큰 도움에 다시 한번 감사드립니다.
Rich P

이유는 모르겠지만 Bracket을 넣으면 효과가 있었고 내 앱 모듈에 RouterModule을 가져 오지 않았습니다.
Cegone

1

routerLink 대신 routerlink를 사용 했습니다 .


나는이 실수를 저질렀 고 이것은 그것을 고쳤다! 나는 또한 왜 당신이 반대표를 받았는지 모르겠습니다 (대신 댓글이 될 수 있었 거나이 특정 질문에 직접 대답하지 않았기 때문일까요?). 반대 투표를 한 사람들이 이유를 제공 할 수 있다면 좋을 것입니다.
JoniVR

1

나는이 질문이 지금까지 상당히 오래되었다는 것을 알고 있으며 지금까지 수정했을 가능성이 높지만이 문제를 해결하는 동안이 게시물을 찾은 모든 사람을위한 참조로 여기에 게시하고 싶습니다. Anchor 태그가 Index.html에 있으면 작동하지 않습니다. 구성 요소 중 하나에 있어야합니다.


1

모듈을 분할 한 후이 오류가있는 사람은 경로를 확인하면 다음과 같은 일이 발생했습니다.

public-routing.module.ts :

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: '**', redirectTo: 'home' } // ← This was my mistake
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class PublicRoutingModule { }

app-routing.module.ts :

const routes: Routes = [
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

움직임 { path: '**', redirectTo: 'home' }AppRoutingModule로 하십시오.

public-routing.module.ts :

const routes: Routes = [
    { path: '', component: HomeComponent },
    { path: 'home', component: HomeComponent },
    { path: 'privacy-policy', component: PrivacyPolicyComponent },
    { path: 'credits', component: CreditsComponent },
    { path: 'contact', component: ContactComponent },
    { path: 'news', component: NewsComponent },
    { path: 'presentation', component: PresentationComponent }
]

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class PublicRoutingModule { }

app-routing.module.ts :

const routes: Routes = [
    { path: '**', redirectTo: 'home' }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

1

이 상황에 적합한 또 다른 사례가 있습니다. 인터셉터에서 Boolean이 아닌 값을 반환하도록 만들면 최종 결과는 이와 같습니다.

예를 들어, 나는 obj && obj[key] 물건 . 잠시 디버깅 한 후 Boolean(obj && obj[key])클릭이 통과되도록하려면 수동으로 부울 유형으로 변환 해야합니다.



1

내 눈처럼별로 예리하지 않은 눈 때문에 나는 href대신 routerLink#facepalm을 알아 내기 위해 몇 번의 검색을했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.