【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。

简介: 【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。

app.component.html

<button
(click)="
  location.go(
    'api/path',
    '?id=1&pageIndex=2&pageSize=10#hashValue2'
  );
  path1 = location.path(true);
  path2 = location.path(false)
"
>
【推荐使用】修改当前浏览器url路径,参数为多参数,并往所属平台(如浏览器)的历史堆栈中追加一个新条目
</button>
<br>
<button
  (click)="
    location.replaceState('', 'id=1#hashValue1');
    path1 = location.path(true);
    path2 = location.path(false)
  "
>
  修改当前浏览器url参数为单参数,并替换所属平台(如浏览器)的历史堆栈的顶部条目
</button>
<br />
<button
  (click)="
    location.replaceState(
      'api/path',
      '?id=1&pageIndex=2&pageSize=10#hashValue2'
    );
    path1 = location.path(true);
    path2 = location.path(false)
  "
>
  修改当前浏览器url路径,参数为多参数,并替换所属平台(如浏览器)的历史堆栈的顶部条目
</button>
<br />
<p style="color: red;">【含hash的url】{{ path1 }}</p>
<p style="color: red;">【不含hash的url】{{ path2 }}</p>
<hr />
<button (click)="path3 = normalizeQueryParams('a=1&b=2&c=3')">
  参数“a=1&b=2&c=3”前面加?
</button>
<p>【返回值】{{ path3 }}</p>
<hr />
<button (click)="path4 = joinWithSlash('path1', 'path2')">
  连接路径path1和path2
</button>
<p>【返回值】{{ path4 }}</p>
<hr />
<button (click)="path5 = stripTrailingSlash('/a/b/c/')">
  去掉“/a/b/c/”最后一个“/”
</button>
<p>【返回值】{{ path5 }}</p>
<hr />
<button (click)="state_str = getState()">报告位置历史记录的当前状态</button>
<p>{{ state_str }}</p>
<hr />
<button
  (click)="
  isEqual = location.isCurrentPathEqualTo(
      '/api/path',
      'id=1&pageIndex=2&pageSize=10'
    )
  "
>
  对指定的路径进行标准化,并和当前的标准化路径进行比较
</button>
<p>
  如果指定的 URL 路径和标准化之后的路径一样,则返回 true,否则返回
  false。【返回值】{{ isEqual }}
</p>
<hr />
<button (click)="path6 = location.normalize('/api/path/')">
  去掉“/api/path/”末尾斜杠
</button>
<p>【返回值】{{ path6 }}</p>
<hr />
<button (click)="path7 = location.prepareExternalUrl('api/path/')">
  在“api/path/”前加斜杠
</button>
<p>【返回值】{{ path7 }}</p>
<hr />
<button (click)=" location.forward()"> 前进 </button>
<button (click)=" location.back()"> 后退 </button> 
<hr />
<p style="color: green;">【监听路由变化】{{url}}</p>
<p style="color: green;">【监听路由状态】{{state}}</p>

app.component.ts

import { Component } from '@angular/core';
import {
  Location,
  LocationStrategy,
  PathLocationStrategy,
} from '@angular/common'; //引入获取、修改当前页面url相关参数的类
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
  providers: [
    Location,
    { provide: LocationStrategy, useClass: PathLocationStrategy },//引入获取、修改当前页面url相关参数的类
  ],
})
export class AppComponent {
  constructor(
    public location: Location //引入获取、修改当前页面url相关参数的类
  ) {}
  path1 = '';
  path2 = '';
  path3 = '';
  path4 = '';
  path5 = '';
  path6 = '';
  path7 = '';
  state_str: any = '';
  isEqual = false;
  url = '';
  state: any = '';
  // 静态方法----------------------------------------
  //给定 URL 参数字符串,如果需要则增加 '?' 前缀,否则原样返回。
  normalizeQueryParams(params: string) {
    return Location.normalizeQueryParams(params);
  }
  //给定 url 的两个部分,把它们连接(join)在一起,如有必要则添加一个斜杠。
  joinWithSlash(start: string, end: string) {
    return Location.joinWithSlash(start, end);
  }
  //如果 url 具有结尾斜杠,则移除它,否则原样返回。 该方法会查找第一个 #、? 之前的结尾 / 字符,之后的则不管。如果 url 中没有 #、?,则替换行尾的。
  stripTrailingSlash(url: string) {
    return Location.stripTrailingSlash(url);
  }
  // 方法----------------------------------------
  /*
this.location.path() //返回标准化之后的 URL 路径
// ----------------------------------------
path(includeHash: boolean = false): string
参数
includeHash boolean
路径中是否包含一个锚点片段(Anchor fragment)。
可选. 默认值是 `false`.
返回值
标准化之后的 URL 路径。
*/
  // 报告位置历史记录的当前状态。
  getState() {
    return JSON.stringify(this.location.getState(), null, 2);
  }
  ngOnInit() {
    console.log(this.location);
    this.location.onUrlChange((url: string, state: unknown) => {
      (this.url = url), (this.state = JSON.stringify(state, null, 2));
      console.log(url, state);
    });
  }
}

浏览器渲染效果


相关文章
|
8天前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
2月前
|
Python
路由(URL routing)
【8月更文挑战第23天】
29 4
|
4月前
|
前端开发 安全 UED
【项目实战】从终端到浏览器:实现 ANSI 字体在前端页面的彩色展示
在学习和工作中,我们经常需要使用日志来记录程序的运行状态和调试信息。而为了更好地区分不同的日志等级,我们可以使用不同的颜色来呈现,使其更加醒目和易于阅读。 在下图运行结果中,我们使用了 colorlog 库来实现彩色日志输出。通过定义不同日志等级对应的颜色,我们可以在控制台中以彩色的方式显示日志信息。例如,DEBUG 级别的日志使用白色,INFO 级别的日志使用绿色,WARNING 级别的日志使用黄色,ERROR 级别的日志使用红色,CRITICAL 级别的日志使用蓝色。
|
4月前
|
Web App开发 XML 开发框架
技术心得记录:在IE浏览器中的奇怪页面表现
技术心得记录:在IE浏览器中的奇怪页面表现
43 0
|
2月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
33 5
|
2月前
|
API 开发者 Python
"FastAPI路由大揭秘!轻松玩转URL映射,让你的Web应用路由设计既RESTful又灵活多变,秒杀传统框架的秘籍在这里!"
【8月更文挑战第31天】在Web开发中,路由是连接用户请求与后端逻辑的关键。FastAPI作为现代Python Web框架的佼佼者,以其简洁的API设计和高性能,提供了高度灵活的路由系统。本文通过开发一个博客系统的案例,详细介绍了FastAPI中路由的实现方法,包括基础路由定义、参数类型验证及路由分组与嵌套等,展示了如何轻松构建RESTful风格的URL映射,提升应用的可维护性和扩展性。
48 2
|
2月前
|
缓存 前端开发 JavaScript
输入URL到页面渲染的全过程
输入URL到页面渲染的全过程
28 1
|
2月前
|
JavaScript Linux 应用服务中间件
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
|
2月前
|
开发者 Java UED
大文件传输不再头疼:揭秘Struts 2如何轻松应对文件上传与下载难题!
【8月更文挑战第31天】在Web应用开发中,文件上传与下载至关重要。Struts 2作为主流Java EE框架,凭借Commons FileUpload及文件上传拦截器简化了相关操作。本文探讨Struts 2在文件传输上的优势,通过具体配置与代码示例,展示如何设置最大文件大小、使用`fileUpload`拦截器以及实现文件上传与下载功能。对于大文件传输,Struts 2不仅能够轻松应对,还支持上传进度显示,有效提升了用户体验。总体而言,Struts 2为文件传输提供了高效便捷的解决方案,助力开发者构建稳定可靠的Web应用。然而,在处理大文件时需兼顾网络带宽与服务器性能,确保传输顺畅。
42 0
|
2月前
|
API UED 开发者
Vaadin路由魔法:导航之舟,带你穿越页面迷宫!驾驭神奇URL,解锁无限可能!
【8月更文挑战第31天】Vaadin是一款现代Java Web开发框架,其路由机制结合前后端路由,确保流畅的用户体验和高效服务器资源利用。通过`@Route`注解和`Router`类,开发者可以轻松定义和管理页面路径。例如,`@Route(&quot;home&quot;)`可指定视图路径,而参数化路由如`@Route(&quot;user/:userId&quot;)`则允许URL传参。此外,Vaadin还提供了丰富的导航API和自定义路由事件监听器,助力开发者构建结构清晰且体验优秀的Web应用。
31 0

热门文章

最新文章

下一篇
无影云桌面