当前位置: 首页 > 知识库问答 >
问题:

角度:如何仅在应用程序内部返回

雷浩思
2023-03-14

返回到Angular中的上一页相当简单:

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();
  }
}

这相当于点击浏览器的“后退”按钮。但是,如何修改此代码,使其符合以下条件_地方back()会将您带到应用程序外部的url,它会将您重定向到应用程序内部的路由。

例如,假设你在谷歌。com,然后粘贴到我的应用程序中。com/page foo,然后朝那个方向导航<代码>此_地方back()将带您返回谷歌。com,但我希望它导航到我的应用程序。com/页面栏。

共有1个答案

万俟高峻
2023-03-14

在https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page.找到答案

1.制作一个新的导航服务

import { Injectable } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { Location } from '@angular/common';

@Injectable({
  providedIn: 'root'
})
export class NavigationService {
  private MAX_HISTORY_LEN = 10; // prevent history from growing indefinitely
  private history: string[] = [];

  constructor(private router: Router, private location: Location) {
    this.router.events.subscribe((event) => {
      if (event instanceof NavigationEnd) {
        this.history.push(event.urlAfterRedirects);
        if (this.history.length > this.MAX_HISTORY_LEN) {
          this.history.shift();
        }
      }
    });
  }

  back(): void {
    this.history.pop();
    if (this.history.length > 0) {
      this.location.back();
    } else {
      this.router.navigateByUrl('/');
    }
  }
}

2、将服务注入应用程序。组成部分ts,以便跟踪整个应用程序的历史记录

export class AppComponent implements AfterViewInit {

  constructor(private navigationService: NavigationService) {
  }
  ...

3、然后在任何需要使用此功能的地方更新(单击)。使用原始示例:

@Component({
  // component's declarations here
})
class SomeComponent {

  constructor(private navigationService: NavigationService) 
  {}

  backClicked() {
    this.navigationService.back();
  }
}

我在博客上做了一些调整:

  • 添加了一个MAX_HISTORY_LEN以防止历史数组在整个应用程序使用过程中无限增长
  • app.component.ts中注入导航服务,以便它始终跟踪历史记录。如果您只在调用. back()的组件中注入服务,那么您第一次调用它时它可能没有历史记录。
 类似资料:
  • 问题内容: 我一直在从事一个更像框架的项目,并且可以安装几个应用程序/模块。像基本的应用商店或google.play商店一样看到它。这是一个Intranet应用程序,所有模块都可以添加到您的用户帐户中。 该框架已经在开发中,但是我现在正在围绕应用程序/模块的想法。(链接到开发中的概念证明,可以在这里找到) 一个应用程序应该是独立的,并且不能突然包含框架中的脚本,这可以通过在单独的模块中进行结构化来

  • 问题内容: 我尝试使用angular-ui,并尝试注入$ stateProvider: html js(test / appModule.js) 堆栈跟踪 如果我删除带有注释的 $ stateProvider 和 ui.router ,那么一切都会起作用: 那么注入 $ stateProvider 的问题有解决的任何想法吗? PS 我尝试了ui示例,它可以工作,但是我无法弄清楚为什么我的不行。 问

  • 问题内容: 我试图弄清楚如何设置Apache Tomcat服务器以为具有深层链接的角度应用程序提供服务。例如: 静态服务器在收到对mysite.com/的请求时,通常会返回index.html。但是它拒绝mysite.com/heroes/42并返回404-Not Found错误,除非将其配置为返回index.html。 我想在localhost / angular上提供angular应用,我尝试

  • 问题内容: 我正在尝试将两个有角度的应用程序/模块添加到一页。在下面的小提琴中,您可以看到始终只有html代码中引用的第一个模块可以正常工作,而第二个模块不能被angular识别。 在这个小提琴中,我们只能执行该方法,而在这个小提琴中,仅该方法可以正常工作。 我正在寻找如何将两个角度模块正确放置到一页中的方法。 问题答案: 每个HTML文档只能自动引导一个AngularJS应用程序。在文档中找到的

  • 我似乎找不到任何关于如何在我的IBM Social Business SmartCloud站点中注册/部署应用程序的文档。这是在他们的云服务器上,而不是我自己的本地主机上。 我使用IBM SmartCloud Engage演示帐户订阅创建了一个Admin AppDeveloper用户帐户。我基本上是在尝试将HelloWorld iWidget添加到某个应用程序菜单中,但找不到注册/添加的位置,因此

  • 是否可以保存谷歌地图的一部分并将其添加到我的应用程序中并显示出来?因为我只需要有限的区域,我不想在应用程序中使用internet连接。或者有可能限制在线地图中的区域?