嗨,我对Angular有问题。当我单击链接时,浏览器将重新加载站点(Abgular通常仅加载与path连接的组件)。我该怎么办?
Page1和Page2是默认组件。
app.module.ts
import {RouterModule, Routes} from '@angular/router';
import { Page1Component } from './page1/page1.component';
import { Page2Component } from './page2/page2.component';
const routes: Routes = [
{ path: 'page1', component: Page1Component },
{ path: 'page2', component: Page2Component }
];
@NgModule({
declarations: [
AppComponent,
Page1Component,
Page2Component
],
imports: [
BrowserModule,
RouterModule.forRoot(routes)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.component.ts
<router-outlet></router-outlet>
<a href="/page1">Page1</a>
<a href="/page2">Page2</a>
答案 0 :(得分:5)
单页应用程序背后的想法是,浏览器在获取初始.html
之后再也不会触发对另一个index.html
页面的请求。
由Angular的@angular/router
启用的前端导航仅模仿“页面”。
当您打开新的Angular“页面”时,将执行JavaScript,该操作会从DOM中删除当前可见的元素,并用新元素替换它们,从而形成一个外观不同的屏幕,我们称之为“页面”。
在锚元素(href
)上使用<a>
,是在告诉浏览器从服务器获取另一个页面。相反,您应该告诉Angular替换DOM元素以形成一个新的屏幕。您可以使用routerLink
中的RouterModule
指令来完成此操作。
<a routerLink="/page1">Go to page 1</a>
我建议您通读Angular官方网站angular.io上的“英雄之旅”教程。它也涵盖了路由。路由也是covered here。
答案 1 :(得分:2)
使用href
将在该anchor
标签上执行URL重定向,该重定向的确在同一标签上进行(因为考虑了target='_self' on anchor
)。
使用Angular Router API提供的routerLink
指令,该指令有助于在SPA页面之间导航。
<a routerLink="/page1">Page1</a>
<a routerLink="/page2">Page2</a>
答案 2 :(得分:1)
href
代表超级引用,用于在多页应用程序的多页之间切换。由于角度应用程序主要是SPA's (Single Page Applications)
,因此routerLink
是一个角度指令,用于加载页面中的组件。使用routerLink
仅刷新页面上的组件,而不刷新整个页面。因此,您应该使用routerLink
来防止页面刷新。以下应该是您的app.component.ts的内容:
<router-outlet></router-outlet>
<a routerLink="/page1">Page1</a>
<a routerLink="/page2">Page2</a>