Как вернуться на последнюю страницу
есть ли умный способ вернуться на последнюю страницу в Angular 2?
что-то вроде
this._router.navigate(LASTPAGE);
например, страница C имеет Вернуться Назад,
страницы -> страница c, щелкните его, вернуться к странице А.
страница B - > страница C, нажмите на нее, вернитесь на страницу B.
есть ли у маршрутизатора эта информация истории?
12 ответов:
на самом деле вы можете воспользоваться встроенной службой определения местоположения, которая владеет api "назад".
здесь (машинопись):
import {Component} from '@angular/core'; import {Location} from '@angular/common'; @Component({ // component's declarations here }) class SomeComponent { constructor(private _location: Location) { } backClicked() { this._location.back(); } }
на окончательный вариант угловой 2.x / 4.x-вот документы https://angular.io/docs/ts/latest/api/common/index/Location-class.html
/* typescript */ import { Location } from '@angular/common'; // import stuff here @Component({ // declare component here }) export class MyComponent { // inject location into component constructor constructor(private location: Location) { } cancel() { this.location.back(); // <-- go back to previous location on cancel } }
вы можете реализовать
routerOnActivate()метод на вашем классе маршрута, он предоставит информацию о предыдущем маршруте.routerOnActivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) : anyзатем вы можете использовать
router.navigateByUrl()и передать данные, полученные отComponentInstruction. Например:this._router.navigateByUrl(prevInstruction.urlPath);
испытано с угловым 5.2.9
если вы используете якорь вместо кнопки, вы должны сделать это пассивный ссылке С
href="javascript:void(0)"сделать угловую работу положения.
app.component.tsimport { Component } from '@angular/core'; import { Location } from '@angular/common'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: [ './app.component.css' ] }) export class AppComponent { constructor( private location: Location ) { } goBack() { // window.history.back(); this.location.back(); console.log( 'goBack()...' ); } }
app.component.html<!-- anchor must be a passive link --> <a href="javascript:void(0)" (click)="goBack()"> <-Back </a>
также работает для меня, когда мне нужно вернуться в файловой системе. P.S. @angular: "^5.0.0"
<button type="button" class="btn btn-primary" routerLink="../">Back</button>
Я сделал кнопку, которую я могу использовать в любом месте моего приложения.
создать этот компонент
import { Location } from '@angular/common'; import { Component, Input } from '@angular/core'; @Component({ selector: 'back-button', template: `<button mat-button (click)="goBack()" [color]="color">Back</button>`, }) export class BackButtonComponent { @Input()color: string; constructor(private location: Location) { } goBack() { this.location.back(); } }затем добавить его в любой шаблон, когда вам нужна кнопка "Назад".
<back-button color="primary"></back-button>Примечание: это использование углового материала, Если вы не используете эту библиотеку, то удалите
mat-buttonиcolor.
как я сделал это при переходе на другую страницу Добавить запрос param, передавая текущее местоположение
this.router.navigate(["user/edit"], { queryParams: { returnUrl: this.router.url }прочитайте этот запрос param в вашем компоненте
this.router.queryParams.subscribe((params) => { this.returnUrl = params.returnUrl; });Если returnUrl присутствует включить кнопку назад и когда пользователь нажимает кнопку Назад
this.router.navigateByUrl(this.returnUrl); // Hint taken from SasxaЭто должно быть в состоянии перейти к предыдущей странице. Вместо того, чтобы использовать местоположение.назад я чувствую, что приведенный выше метод более безопасен рассмотрим случай, когда пользователь непосредственно попадает на вашу страницу, и если он нажимает кнопку "назад" с места.назад он перенаправляет пользователя на предыдущую страницу, которая не будет вашей веб-страницы.
в угловой 4 использовать
preserveQueryParams, например:url: /list?page=1 <a [routerLink]="['edit',id]" [preserveQueryParams]="true"></a>при нажатии на ссылку, вы будете перенаправлены
edit/10?page=1, сохраняя paramsref:https://angular.io/docs/ts/latest/guide/router.html#! # link-параметры-массив
вы можете поместить это в директиву, которая может быть прикреплена к любому кликабельному элементу:
import { Directive, HostListener } from '@angular/core'; import { Location } from '@angular/common'; @Directive({ selector: '[backButton]' }) export class BackButtonDirective { constructor(private location: Location) { } @HostListener('click') onClick() { this.location.back(); } }использование:
<button backButton>BACK</button>
Comments