【超实用】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);
    });
  }
}

浏览器渲染效果


相关文章
|
2月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
93 4
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
133 6
|
1月前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
2月前
|
域名解析 缓存 负载均衡
网络浏览器并输入地址到显示的整个过程
网络浏览器并输入地址到显示的整个过程
|
3月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
99 1
|
3月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
61 0
|
4月前
|
SEO 搜索推荐 数据采集
让 JSF 应用秒变搜索引擎宠儿!揭秘 SEO 优化的神奇魔法,让你的网站脱颖而出!
【8月更文挑战第31天】随着互联网的发展,搜索引擎已成为用户获取信息的主要途径,SEO 对 Web 应用至关重要。本文介绍如何提升 JavaServer Faces(JSF)应用的 SEO 友好性,包括关键词优化、网页结构优化和外部链接建设等基础知识,并提出了使用语义化 HTML 标签、优化页面标题和描述、生成静态 HTML 页面及 URL 重写等具体策略,帮助您的网站在搜索引擎中获得更高排名。
35 0
|
4月前
|
安全 开发者
精通Angular路由管理:从基础设置到高级配置,打造复杂SPA导航系统的全方位指南
【8月更文挑战第31天】在单页应用(SPA)中,路由管理至关重要。Angular通过其强大的路由模块提供灵活高效的解决方案。本文通过代码示例详细介绍如何在Angular中设置和管理路由,包括基础路由配置、懒加载、路由保护及高级配置,帮助开发者构建高效安全的导航系统,满足复杂SPA需求。随着Angular的发展,路由管理将更加完善,值得持续关注。
46 0
|
4月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
4月前
|
JavaScript 前端开发 API
如何在 Angular 路由中使用路由解析器
如何在 Angular 路由中使用路由解析器
42 0

热门文章

最新文章

下一篇
DataWorks