Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么同一模块中的组件不使用router.navigate加载?_Angular_Typescript - Fatal编程技术网

Angular 为什么同一模块中的组件不使用router.navigate加载?

Angular 为什么同一模块中的组件不使用router.navigate加载?,angular,typescript,Angular,Typescript,在有人将此问题标记为重复之前,我尝试了以下问题: 针对这些问题,我尝试了解决方案,但没有任何效果。所以我来这里问我自己的问题。 现在谈问题: 我创建了一个新的应用程序,我正在尝试从应用程序中路由到Home.Component。Component with router.navigate。以下是供参考的文件: App Component.html app-routing.module.ts app.module.ts 我不理解为什么单击“单击主页”按钮时未加载home.component.html

在有人将此问题标记为重复之前,我尝试了以下问题:

针对这些问题,我尝试了解决方案,但没有任何效果。所以我来这里问我自己的问题。 现在谈问题:

我创建了一个新的应用程序,我正在尝试从应用程序中路由到Home.Component。Component with router.navigate。以下是供参考的文件:

App Component.html

app-routing.module.ts

app.module.ts

我不理解为什么单击“单击主页”按钮时未加载home.component.html

此外,我还尝试创建另一个组件Second.component,并尝试从Home.component上的按钮clickbutton加载该组件

这些组件不是惰性加载的,它们位于同一模块中。 每当我点击按钮时,url就会改变。那么,为什么关联的组件不加载?我是否遗漏了配置的某些部分?

当你的应用程序启动时,你看到的应用程序组件在那里,是因为它是引导组件,而不是因为它在激活的路径上。您需要使用o元素来渲染与当前路径匹配的组件

根据您想要实现的目标,为了不复制页面上的元素,您可能需要拆分AppComponent。一个部件应该是引导的,并且只包含路由器出口。另一部分应仅包含按钮

我猜您正在尝试添加一个菜单,该菜单将显示在所有页面上,以及一些您可以导航到的页面。在这种情况下,你可以举个例子 将AppComponent保留为引导组件,并在其中添加和菜单:

<p>App component works</p>
<button (click)="onClick()">Home</button>
<button (click)="goToSomeOtherPage()">Some other page</button>
<router-outlet></router-outlet>

随着菜单变得越来越复杂,您可以将其拆分为一个单独的组件,例如使用MainMenuComponent。

您可以为此共享stackblitz吗。@silentsudo我正在更新问题。请在其中找到stackblitz url。那么我是否需要为每个重新定向到任何其他组件的组件添加一个?既然添加路由器出口确实会复制元素,那么如何拆分AppComponent呢?在大多数情况下,整个应用程序中都需要一个路由器出口。它将被放置在一个顶级组件中。其内容将显示与当前路径匹配的任何组件。
import { Router, ActivatedRoute } from '@angular/router';
export class AppComponent {
  constructor(private router:Router){}
  onClick(){
    console.log("Button clicked!!");
    this.router.navigate(['home']);
  }
}
const routes: Routes = [
  { path:'', component: AppComponent, pathMatch:'full'},
  {path:'home', component:HomeComponent},
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }
@NgModule({
  declarations: [
    AppComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
<p>App component works</p>
<button (click)="onClick()">Home</button>
<button (click)="goToSomeOtherPage()">Some other page</button>
<router-outlet></router-outlet>
const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch:'full'},
  { path: 'home', component: HomeComponent },
  { path: 'some/other/page', component: SomeOtherComponent },
];