当我使用从1个组件到下一个组件的路径导航时,angular总是重新加载应用程序。事件顺序:
关于什么是错的想法以及为什么它不停在项目页面上?我一直在拉我的头发(剩下的东西)试图找出一些我确定是一个简单的用户错误。
此外,Chrome控制台或webstorm终端中没有错误。我正在使用角度4.2.4。
以下是我的组件:
的AppModule
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';
import {AppComponent} from './app.component';
import {LocationComponent } from './location/location.component';
import {ItemsComponent } from './items/items.component';
import {AppRoutingModule} from './app-routing.module';
@NgModule({
imports: [
BrowserModule,
FormsModule,
AppRoutingModule
],
declarations: [
AppComponent,
LocationComponent,
ItemsComponent
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
AppRouting
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ItemsComponent } from './items/items.component';
import {LocationComponent} from './location/location.component';
const routes: Routes = [
{ path: 'locations', component: LocationComponent },
{ path: 'items/:id', component: ItemsComponent },
{ path: '', redirectTo: '/locations', pathMatch: 'full' }
];
@NgModule({
imports: [ RouterModule.forRoot(routes, { enableTracing: true }) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {}
AppComponent
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `<div>Hello</div><router-outlet></router-outlet>`
})
export class AppComponent { }
LocationComponent
import {Component, OnInit} from '@angular/core';
import {LocationModel} from './location.model';
import {Router} from '@angular/router';
@Component({
templateUrl: './location.component.html',
styleUrls: ['./location.component.css']
})
export class LocationComponent implements OnInit {
locations: LocationModel[];
location: LocationModel;
constructor(private router: Router) {
this.locations = [
{id: 1, name: 'Loc1'},
{id: 2, name: 'Loc2'},
{id: 3, name: 'Loc3'},
{id: 4, name: 'Loc4'}
];
}
ngOnInit() {
}
onSelect(loc: LocationModel): void {
this.location = loc;
console.log('onSelect for loc.id[' + this.location.id + ']');
window.alert('onSelect for loc.id[' + this.location.id + ']');
this.router.navigate(['/items', this.location.id]);
}
}
位置 - HTML
<nav class="navbar navbar-fixed-top">
<a class="navbar-brand" href="do_nothing">CO_ICON</a>
<div class="nav navbar-nav">
<a class="nav-item nav-link active" href="do_nothing">
<div>Add</div>
</a>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3">
<!-- /.card -->
<div class="card" *ngFor="let location of locations" (click)="onSelect(location)">
<div class="card-block">
<div class="list-group">
<a href="do_nothing" class="list-group-item">{{location.name}}</a>
</div>
</div>
</div>
<!-- /.card -->
</div>
</div>
ItemComponent
import 'rxjs/add/operator/switchMap';
import { Component, OnInit } from '@angular/core';
import {ItemModel} from './item.model';
// import {ItemService} from './item.service';
import {ActivatedRoute, ParamMap} from '@angular/router';
@Component({
templateUrl: './items.component.html',
styleUrls: ['./items.component.css']
})
export class ItemsComponent implements OnInit {
items: ItemModel[];
constructor(
// private itemService: ItemService,
private route: ActivatedRoute) {
console.log('constructed ItemsComponent');
// window.alert('constructed ItemsComponent');
this.items = [
{id: 1, location: 1, name: 'Item 1', quantity: 1},
{id: 2, location: 1, name: 'Item 2', quantity: 2},
{id: 3, location: 2, name: 'Item 3', quantity: 1},
{id: 4, location: 1, name: 'Item 4', quantity: 2}
];
}
ngOnInit() {
// this.route.paramMap
// .switchMap((params: ParamMap) => this.itemService.getItems(+params.get('id')))
// .subscribe(list => this.items = list);
console.log('ngOnInit for is with 1 - A');
window.alert('ngOnInit for is with 1 - A');
}
}
项目 - HTML
<nav class="navbar navbar-fixed-top">
<a class="navbar-brand" href="do_nothing">CO_ICON</a>
<div class="nav navbar-nav">
<a class="nav-item nav-link active" href="do_nothing">
Add Item
</a>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3">
<!-- /.card -->
<div class="card" *ngFor="let item of items">
<div class="card-block">
<div class="list-group">
<a href="do_nothing" class="list-group-item">{{item.name}}</a>
</div>
</div>
</div>
<!-- /.card -->
</div>
</div>
非常感谢任何帮助!谢谢!
...克里斯
答案 0 :(得分:11)
删除href =&#34;#&#34;来自您的锚标签。原生html href属性导致angular重新加载。角度导航应由路由器指令和服务处理。
答案 1 :(得分:2)
如LLai在his answer中所述,为防止重新加载,您应该不要使用href
标记中的<a>
属性,而应使用AngularRouter和他的{ {1}}指令。
因此,请从您的routerLink
标记和中删除href属性
像这样使用<a>
:
routerLink
干杯。 :)
答案 2 :(得分:-1)
添加javascript:;改为链接href ...这不会立即使页面滚动到顶部,或者如果你也使用哈希值,也可以将你的路由器炸掉。