首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 9: queryParams正在向路由URL中添加额外的字符

基础概念

Angular 的 queryParams 是一种用于在路由之间传递参数的方式。这些参数会被编码并附加到 URL 中,以便在不同的路由组件之间共享数据。

相关优势

  • 简单易用:通过 queryParams 可以轻松地在不同的路由之间传递数据。
  • URL 可读性:参数直接显示在 URL 中,便于调试和理解。
  • 无状态:不需要在服务端存储状态,适合简单的应用场景。

类型

queryParams 可以传递字符串、数字、布尔值等基本类型,也可以传递对象,但对象会被序列化为 JSON 字符串。

应用场景

  • 在不同的页面之间传递搜索条件。
  • 在用户登录后传递用户信息。
  • 在多步骤表单中传递中间数据。

问题描述

你提到在使用 Angular 9 时,queryParams 正在向路由 URL 中添加额外的字符。这通常是由于参数编码或序列化问题引起的。

原因分析

  1. 参数编码问题:URL 中的某些字符需要进行编码,否则会导致 URL 不合法。
  2. 对象序列化问题:当你传递一个对象时,它会被序列化为 JSON 字符串,这个过程中可能会引入额外的字符。

解决方法

1. 确保参数正确编码

在传递参数之前,使用 encodeURIComponent 对参数进行编码:

代码语言:txt
复制
import { Router } from '@angular/router';

constructor(private router: Router) {}

navigateWithParams() {
  const param = 'some value with spaces';
  this.router.navigate(['/target-route'], {
    queryParams: { param: encodeURIComponent(param) }
  });
}

在目标组件中解码:

代码语言:txt
复制
import { ActivatedRoute } from '@angular/router';

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.queryParams.subscribe(params => {
    const param = decodeURIComponent(params['param']);
    console.log(param);
  });
}

2. 处理对象参数

如果你需要传递一个对象,确保在目标组件中正确解析 JSON 字符串:

代码语言:txt
复制
navigateWithObjectParams() {
  const obj = { key: 'value', anotherKey: 'anotherValue' };
  this.router.navigate(['/target-route'], {
    queryParams: { obj: JSON.stringify(obj) }
  });
}

在目标组件中解析:

代码语言:txt
复制
ngOnInit() {
  this.route.queryParams.subscribe(params => {
    if (params['obj']) {
      const obj = JSON.parse(params['obj']);
      console.log(obj);
    }
  });
}

参考链接

通过以上方法,你应该能够解决 queryParams 向路由 URL 中添加额外字符的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular 从入坑到挖坑 - Router 路由使用入门指北

四、Step by Step 4.1、基础概念 4.1.1、base urlAngular 应用,框架会自动将 index.html 文件 base url 配置作为组件、模板和模块文件基础路径地址...在 Angular 项目中,系统路由需要我们将一个 url 地址映射到一个展示组件,因此需要手动去设置 url 与组件之间映射关系 因为我们在使用 Angular CLI 创建项目时,选择了添加路由模组...,这里我们在定义路由信息时,定义了一个空路径用来表示系统默认地址,当用户请求时,重定向到 /home 路径上,因为只有完整 url 地址匹配空字符串时才应该进行重定向操作,所以这里需要指定匹配模式是全部匹配...productId=xxxx">跳转 对于直接通过 a 标签进行路由跳转,我们可以在 a 标签上通过绑定 queryParams 属性来添加查询参数信息 这里通过 queryParams 属性绑定是一个对象...对于参数对象属性(key)对应属性值(value),我们可以绑定一个组件属性进行动态赋值,也可以通过添加单引号将参数值作为一个固定数值,例如在下面代码两个查询参数就是固定值 <a class

4.2K50

Angular 2 + 折腾记 :(4)初步了解路由及使用

,还可以完全不请求(在生命周期里面控制); angular 2 + 里面有两种url风格 一个是常规我们访问url那种protocol://domain/path/f/fds 一种hash(#)风格,...路由相关指令或者术语 :路由占位符,可以理解为渲染路由组件区域,一个组件只能一个无命名,命名可以多个 ng-content: 可以嵌套一个组件内容在另外一个组件...fragment:代码片段拼接到url,只接受字符串,在url就是hash拼接;/security-alert#1232 ActivatedRoute: 当前活动路由,非常常用,逻辑处理时候经常用到...navigate :配合可选参数可以实现当前路劲下相对跳转,带参数跨页面跳转等 angular 4版本路由加强了很多。。比如可以在路由进入或者脱离时候做一些事件处理!!!...,也就是要生效必须到相应模块引入(NgModule)import进去复制代码 ---- 小技巧 获取urlid // 根据是否存在id判断是新增还是修改 checkAction() {

3K20
  • angular基础面试题_java web面试题

    CurrencyPipe :把数字转换成货币字符串,根据本地环境规则进行格式化。 DecimalPipe:把数字转换成带小数点字符串,根据本地环境规则进行格式化。...PercentPipe :把数字转换成百分比字符串,根据本地环境规则进行格式化angualr angular路由配置: 路由配置在 app.route.ts 路由跳转方式 [routerLink...]="['/devicepay']" [queryParams]="{id:key}" //路由跳转传参 //获取值 this.route.queryParams.subscribe((res)=>{...], 本模块全局服务贡献那些服务创建器。...灵活路由,具备延迟加载功能 更容易学习 angular1是全局监听,变量越多性能越差,angular2采用模块化监听,提升了性能 在Angular 2应用,我们应该注意哪些安全威胁?

    13K50

    Angular路由实现原理

    他有如下特性:URL hash值改变不会被触发页面的重载。页面发送请求时, hash 部分不会被发送。hash 值改变,会记录在浏览器历史记录,可使用浏览器“后退”,“前进”触发页面跳转。...服务端不需要额外配置。实现起来更加简单。劣势:SEO 并不友好用户体验不好基于History API优势:URL 看起来和普通url 一样, 更加美观简洁。...Angular路由实现已经了解了基本原理,那么Angular路由又是怎么实现呢。我到github上下载了angular路由实现源码。...图片下一步构建UrlTree,queryParams路由参数,会根据路由方式选择是否和原路由参数合并。图片最终返回是一个构建完成Url。通过构建url和扩展参数开始导航。...图片后面实际处理路由请求时,还会对路由进行合并,路由守卫校验,设置活动路由等操作。这些都是angular提供进阶路由能力。基本路由功能实现看起来还是非常简单清晰

    79510

    Angular4路由Router类navigate跳转用法

    之前通过学习 angular4 框架开发,它确实比以前有了很大变化和改进,好多地方也不是那么容易就能理解,好在官方文档和例子是中文,示例相对简单,对英文不太好伙伴们学习还是有很大帮助。...官方地址:https://angular.cn/ 路由文档:https://angular.cn/api/router/Router#instance-methods 在学习过程首先要学习掌握框架基础知识...,接着就是路由(router)机制学习,项目开发中路由是离不开,且好多地方都要用到。...name=1) this.router.navigate(['login', 1],{ queryParams: { name: 1 } }); 保留之前路由查询参数,将 preserveQueryParams...) this.router.navigate(['/role'], { preserveFragment: true }); 路由跳转时浏览器url会保持不变,但是传入参数依然有效,将 skipLocationChange

    67700

    Angular 18 引入了 Zoneless 变更检测

    开发人员可以通过在其应用程序引导程序添加如下提供程序来尝试实验性 zoneless 支持: bootstrapApplication(App, { providers: [ provideExperimentalZonelessChangeDetection...Angular.dev 是 Angular 文档官方网站。其中包含了动手入门之旅、互动游乐场、更新指南和简化导航。所有对 angular.io 请求现在都重定向到了 angular.dev。...现在可以在 Angular 18 为 ng-content 指定默认内容。这允许开发人员在他们组件中提供回退内容。...18 通过允许使用返回动态重定向路由函数,在路由重定向方面提供了更高灵活性。...}) => { const errorHandler = inject(ErrorHandler); const userIdParam = queryParams['userId

    21310

    JSON Web Token(JWT)教程:一个基于Laravel和AngularJS例子

    分隔多个base64url编码字符串组成一个新字符串。它由三部分组成:头部(Header)、负载(Payload)与签名(Signature)。 ?...但是,如果我们要添加额外保护层,可以使用JSON Web Encryption(JWE)规范对JWT payload进行加密。...当然,如果我们想避免使用JWE额外开销,另一个选择是将敏感信息保留在我们数据库,并且在需要访问敏感数据时,使用我们token进行额外API调用。 为什么需要Web Tokens?....* 添加 JWTAuthServiceProvider 到我们 app/config/app.php  providers array。...当我们一个API 服务器( server),如 api.jwt.dev/v1/restricted发出POST请求时,我们正在进行跨域请求,并且必须在后端启用CORS。

    30.6K10

    Angular v18 现已推出!

    () ]});添加提供程序后,从 polyfill 删除zone.js。...您可以在下面找到一个简单电子商务网站模拟。我们引入了人为加载延迟来模拟非常慢网络连接。想象一下,当页面正在加载并且尚未补水时,用户想要将多个耳机添加到他们购物车。...此更改将加快您 Angular CLI 安装时间。路由重定向作为函数为了在处理重定向时实现更高灵活性,在 Angular v18 ,redirectTo 现在接受返回字符函数。...它提供了一些简洁功能,例如基于文件路由、API 路由、一流 Markdown 支持等。Analog.js团队一直在尝试社区一直喜欢单文件组件格式!...我们正处于世界第二大网站YouTube使用Angular反应性原语地方,我们正在作为一个更大工作组一部分,将Signals添加到Web平台。

    23310

    AngularDart4.0 英雄之旅-教程-07路由

    由于路由器在自己,首先将该包添加到应用pubspec: ? 并非所有的应用程序都需要路由,这就是为什么Angular路由器处于独立可选软件包原因。...Route对象: path:路由器将此字符串与浏览器地址栏(/ heroes)URL匹配。...路由链接 用户不必粘贴路由路径到地址栏。 相反,模板添加一个锚点,点击后会触发到HeroesComponent导航。...你已经完成了应用程序路由。 您没有模板添加英雄详情链接,因为用户单击导航链接不是为了查看特定英雄; 而是点击一个英雄名字,不管名字是显示在仪表板还是英雄列表。...你正在路由navigate()方法传递一个两元素链接参数列表(一个名字和路由参数),就像你在DashboardComponent[routerLink]绑定中一样。

    17.6K30

    Blazor 路由路由模板

    此评估算法基于 URL 中发现段及其在字符位置。例如,文本段比参数段更具体,因此具有更多路由约束参数段被视为比存在更少约束其他段更具体。...路由实现是通过 SPA 框架(其中 Angular 最为出色)移动到客户端。让我们花点时间对合并 Angular 路由器和仍在使用 Blazor 路由功能进行简要比较。...类型匹配是参数路由和自动绑定到变量常见问题。如果 URL 段包含文本字符串,但绑定变量声明类型为 int,会发生什么情况?...它包括每个 URL 参数添加类型属性,如下所示: @page “/user/view/{Id:int}” 参数名称后跟冒号和表示 .NET 类型文本。...如果当前页面 URL 与引用 URL 匹配,则“活动”CSS 类将自动添加到由 NavLink 组件呈现定位标记。“活动”CSS 类实现仍然是页面开发人员责任。

    8.4K21

    【译】.NET Core 3.0 Preview 3关于ASP.NET Core更新内容

    内置输入组件存在一些限制,我们希望在将来更新改进这些限制。例如,目前不能在生成输入标记上指定任意属性。将来,我们计划启用组件所有额外属性。现在,您需要构建自己组件子类来处理这些情况。...运行时验证 对运行时编译支持已从.NET Core 3.0ASP.NET核心共享框架删除,但现在可以通过向应用程序添加方式来启用它。...应用程序访问页面时,要求对用户进行身份验证,我们将[AuthorizeGuard]应用到正在配置路由上。...路由 在preview3,我们将SignalR hubs连接到最近发布新端点路由特性。...我们Java客户端添加了长轮询支持,这使它能够在不支持WebSockets环境建立连接。

    22.7K10

    vuereact服务端渲染实例

    前端代码正常构建,然后打包生成文件,将打包后文件放到后台渲染服务器项目中。 后端添加和前端相同路由,如果前端采用不是问号加参数方式(oecom.cn/article?...根据路由参数去接口服务器或者数据库、redis查询获得数据,拼接成html,然后返回给页面,如果java则将打包后index.html修改成jsp页面,通过el表达式渲染,如果是nodejs后台,则采用....js"> 上方代码是一个打包后完整index页面,我在页面通过模板语言来进行添加,判断是否有这个返回对象,如果有就进行渲染,渲染部分样式设置为none...,并且前端路由采用是用问号来添加参数方式,我们后台封装了获取文章稿件方法,获取成功以后将内容拼接好返回,也就是上面返回data,如果查询失败这个data就是null,这个data不仅包含TDK...添加热门排行原因是让爬虫在网站自行按照以后链接进行爬取,加快网页收录速度并增加收录量。

    92420

    Angular与React相关

    SPA: Single Page Application简写 单页面应用,整个程序只有一个页面,页面里内容根据路径不同随之切换,页面不发生跳转 3....分条说明. 1.查询参数传值 利用queryParams属性传值 2.路径参数传值,直接把要传递参数写到routerLink对应值数组里,需要对路由配置做设置 7....如果存储在state里值发生变化,对应绑定了该值试图会自动更新 9. React如何进行组件间通信, 详细分别说明? 1. 父子--props对象 2. 子父--回调函数 3....,url网址内容过长 * 2.query, 如果进入query方式传值,Linkto属性值就不是字符串,而是一个对象,通过该对象query属性进行传值 特点: 1.不需要配置路由...path属性, 字符串,用来匹配Link里to值 component属性 组件,当匹配上path时,会显示对应component exact属性, 知名该路由是否排他 3.Link

    1.2K20
    领券