Хорошо, я думаю, что вы переходите, изменяя URL-адрес в браузере, поскольку в приведенном примере нет способа навигации, что, безусловно, не сработает, поскольку при изменении URL-адреса вы фактически перезагружаете свое приложение, которое удаляет все данные в памяти вашего приложения.
Ваш сервис работает нормально, вам просто нужно перемещаться с помощью @ angular / router, и нет, он не может обрабатывать изменения URL вручную, и никакие ничто иное не может сделать это.
Но он будет обрабатывать ссылки через routerLink
подробнее об этом здесь - официальные документы маршрутизатора
внутри product-list.component.html
product-listing works!
<p *ngFor="let item of sampleData">{{ item.id }} -{{ item.name }}</p>
<!-- Example of using routerLink -->
<a routerLink="/update">go to update</a>
он также может обрабатывать динамическую маршрутизацию через службу Router
, используя функции navigateTo
или navigateByUrl
, например:
внутри product-update.component.ts
// product-update.component.ts
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router'
import { FormGroup, FormControl, FormArray } from '@angular/forms';
import { ApiService } from '../../core/api.service';
@Component({
selector: 'app-product-update',
templateUrl: './product-update.component.html',
styleUrls: ['./product-update.component.css']
})
export class ProductUpdateComponent implements OnInit {
dataForm: FormGroup;
// do not forget to import the service
constructor(private api: ApiService, private router: Router) {}
ngOnInit() {
this.dataForm = new FormGroup({
id: new FormControl(' '),
name: new FormControl(' ')
});
}
saveData() {
this.api.addData({
id: this.dataForm.controls.id.value,
name: this.dataForm.controls.name.value
});
// Use of router service `navigateByUrl` to dynamically redirect to another view
this.router.navigateByUrl('/listing')
}
}
Но чтобы любой из этих методов маршрутизации работал, вам нужно добавить RouterModule.forChild()
к импорту модуля, включая объявления этих компонентов. Как это:
внутри product-catalog.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ReactiveFormsModule } from '@angular/forms';
import {CoreModule } from '../core/core.module';
import { RouterModule } from '@angular/router';
import { ProductListingComponent } from './product-listing/product-listing.component';
import { ProductUpdateComponent } from './product-update/product-update.component';
@NgModule({
imports: [
CommonModule, ReactiveFormsModule,
CoreModule.forRoot(),
RouterModule.forChild([]) // Add this to the imports
],
declarations: [ProductListingComponent, ProductUpdateComponent]
})
export class ProductCatalogModule { }
Если вы так и протестируете свой сервис как есть, вы обнаружите, что он работает отлично.
Но опять же, когда вы вручную изменяете URL в браузере, вы перезагружаете свое приложение, которое удаляет всю память / данные приложения, если они не сохранены в бэкэнде.
Вот ссылка на проект редактирования https://stackblitz.com/edit/angular-z2m9ri
Надеюсь, это было полезно