路由器链接不适用于共享模块内的组件

Sen*_*mar 11 angular2-routing routerlink angular

我写了一个名为"Customer"的模块,它有几个组件,如login,home和register.现在我创建了一个共享模块,它也有两个组件,如页眉和页脚.由于页眉和页脚将由客户模块中的所有组件共享,因此我将它们放在共享模块中.共享模块将导入到客户模块.

现在有一个路由器链接指向客户模块内的组件.那些路由器链接没有被解释为href.但是,如果我将这些页眉和页脚组件直接放在客户模块中,那么这些路由器链接就会得到解释.

我在下面列出了代码段.

共享模块文件

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

import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';

@NgModule({
  imports: [ ],
  declarations: [ HeaderComponent, FooterComponent ],
  exports: [ HeaderComponent, FooterComponent ]
})

export class SharedModule { }
Run Code Online (Sandbox Code Playgroud)

客户模块文件

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

import { SharedModule } from './shared/shared.module';
import { CustomerRoutingModule } from './customer-routing.module';

import { CustomerComponent } from './customer.component';
import { CustomerHomeComponent } from './home/home.component';
import { CustomerLoginComponent } from './login/login.component';
import { CustomerRegisterComponent } from './register/register.component';

@NgModule({
  imports: [ SharedModule, CustomerRoutingModule ],
  declarations: [ CustomerComponent, CustomerHomeComponent, CustomerLoginComponent, CustomerRegisterComponent ]
})

export class CustomerModule { }
Run Code Online (Sandbox Code Playgroud)

标头组件html

<div class="header-wrapper">
    <nav class="navbar navbar-light bg-faded">
        <button class="navbar-toggler hidden-lg-up" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"></button>
        <div class="collapse navbar-toggleable-md" id="navbarResponsive">
            <a class="navbar-brand header-logo" routerLink="./">Your space your time</a>
            <ul class="nav navbar-nav header-menu float-lg-right">
                <li class="nav-item header-menu-item">
                    <a class="nav-link header-menu-link" href="#">About</a>
                </li>
                <li class="nav-item header-menu-item">
                    <a class="nav-link header-menu-link" href="#">Services</a>
                </li>
                <li class="nav-item header-menu-item">
                    <a class="nav-link header-menu-link" routerLink="./signin" routerLinkActive="active">Login <span class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item header-menu-item">
                    <a class="nav-link header-menu-link" routerLink="./signup" routerLinkActive="active">Register</a>
                </li>
            </ul>
        </div>
    </nav>
</div>
Run Code Online (Sandbox Code Playgroud)

客户路由模块

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

import { CustomerComponent } from './customer.component';
import { CustomerHomeComponent } from './home/home.component';
import { CustomerLoginComponent } from './login/login.component';
import { CustomerRegisterComponent } from './register/register.component';

const customerRoutes: Routes = [
  { path: '', redirectTo: 'customer', pathMatch: 'full' },
  { path: 'customer', component: CustomerComponent,
    children: [
      { path: '', redirectTo: 'home', pathMatch: 'full' },
      { path: 'home', component: CustomerHomeComponent },
      { path: 'signin', component: CustomerLoginComponent },
      { path: 'signup', component: CustomerRegisterComponent }
    ]
  }
];

@NgModule({
  imports: [
    RouterModule.forChild(customerRoutes)
  ],
  exports: [
    RouterModule
  ]
})
export class CustomerRoutingModule { }
Run Code Online (Sandbox Code Playgroud)

Emr*_*ürk 43

如果我理解正确,那么你的错误是,你没有在SharedModule中导入RouterModule.因此,只需导入RouterModule以获取指令"routerLink",然后它应该工作:

@NgModule({
  imports: [RouterModule ],
  declarations: [ HeaderComponent, FooterComponent ],
  exports: [ HeaderComponent, FooterComponent ]
})
Run Code Online (Sandbox Code Playgroud)

另一个建议:我认为你不了解SharedModule/CoreModule的模式.您的页眉和页脚组件是您的应用程序的核心组件,您将只在您的应用程序中使用它们(我相信)..所以它们属于CoreModule.SharedModule用于组件,用于多个组件,例如社交媒体链接.您可以在不同的组件中使用它.

但请阅读角度风格指南以获取更多信息:https: //angular.io/styleguide#!#04-10

  • 谢谢@oeem1011,它成功了。我将致力于此并将其更改为核心模块。:) (2认同)

s-f*_*s-f 7

我遇到了同样的问题,除了RouterModule导入之外,我还必须从 更改routerLink="path"[routerLink]="'path'"以使其工作。