问题描述

我使用angular2.0.0-beta.7。当组件在像”/path?query=value1″这样的路径上加载时,它被重定向到”/path”。为什么删除了GET参数?如何保留参数?

路由器出现错误。如果我有一条主路线

@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])

和我的孩子路线一样

@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])

我不能在TodoListComponent中获取参数。

我可以得到矩阵

params("/my/path;param1=value1;param2=value2")

但我想要经典

query params("/my/path?param1=value1&param2=value2")

最佳解决方案

角2.0最终解决方案。看来RouteParams已被弃用。改为:

import {Router, ActivatedRoute, Params} from '@angular/router';
import {OnInit, OnDestroy, Component} from '@angular/core'; @Component({...})
export class MyComponent implements OnInit, OnDestroy { constructor(private activatedRoute: ActivatedRoute) {} ngOnInit() {
// subscribe to router event
this.activatedRoute.params.subscribe((params: Params) => {
let userId = params['userId'];
console.log(userId);
});
} }

如果要获取查询参数,请将this.activatedRoute.params替换为this.activatedRoute.queryParams

关于不支持的说明

@Reto和@ codef0rmer非常正确地指出,根据官方文档,unsubscribe()内部的组件onDestroy()方法在这种情况下是不必要的。这已从我的代码示例中删除。 (请参阅我需要取消订阅this教程的部分)

次佳解决方案

即使这个问题指定版本beta 7,这个问题也是谷歌搜索结果的最佳搜索结果。为此,这里是最新的路由器的答案(目前在alpha.7)。

读取参数的方式发生了巨大变化。首先你需要在你的构造函数中注入一个叫做Router的依赖关系,比如:

constructor(private router: Router) { }

之后,我们可以在ngOnInit方法上订阅查询参数(构造函数也可以,但ngOnInit应该用于可测试性)

this.router
.routerState
.queryParams
.subscribe(params => {
this.selectedId = +params['id'];
});

在本例中,我们从URL读取查询参数,如example.com?id=41

还有一些事情要注意:

  1. 访问params的属性,如params['id']总是返回一个字符串,可以通过+前缀将其转换为数字。

  2. 查询参数被observable提取的原因是它允许re-using是相同的组件实例,而不是加载一个新的实例。每次查询参数更改时,都会导致我们订阅的新事件,因此我们可以对相应的更改做出反应。

第三种解决方案

我非常喜欢@史蒂夫·保罗的回答,但我们可以做同样的事情,无需额外的订阅/取消订阅电话。

import { ActivatedRoute } from '@angular/router';
constructor(private activatedRoute: ActivatedRoute) {
let params: any = this.activatedRoute.snapshot.params;
console.log(params.id);
// or shortcut Type Casting
// (<any> this.activatedRoute.snapshot.params).id
}

第四种方案

当一个这样的URL这样的http://stackoverflow.com?param1=value

您可以通过以下代码获取param1:

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router'; @Component({
selector: '',
templateUrl: './abc.html',
styleUrls: ['./abc.less']
})
export class AbcComponent implements OnInit {
constructor(private route: ActivatedRoute) { } ngOnInit() {
// get param
let param1 = this.route.snapshot.queryParams["param1"];
}
}

第五种方案

首先,我发现使用Angular2的是具有查询字符串的url将是/path;query=value1

要使用您使用的组件访问它是这样的,但现在遵循代码块:

    constructor(params: RouteParams){
var val = params.get("query");
}

至于为什么在加载组件时会被删除,这不是默认行为。我特别检查了一个干净的测试项目,没有被重定向或更改。它是默认路由还是其他特殊的路由?

请阅读https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters中Angular2教程中的查询字符串和参数的路由

第六种方案

您可以使用ActivatedRoute在URL中传递查询参数,如下所示:

url: – http:/domain.com?test = abc

import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router'; @Component({
selector: 'my-home'
})
export class HomeComponent { constructor(private sharedServices : SharedService,private route: ActivatedRoute) {
route.queryParams.subscribe(
data => console.log('queryParams', data['test']));
} }

第七种方案

嗨,你可以使用URLSearchParams,你可以阅读更多关于它的here

进口:

import {URLSearchParams} from "@angular/http";

功能:

getParam(){
let params = new URLSearchParams(window.location.search);
let someParam = params.get('someParam');
return someParam;
}

注意:它不受所有平台的支持,似乎在”EXPERIMENTAL”状态由角度文档

阅读原文

angular2 学习资料

How to Build Nested Model-driven Forms in Angular 2

如何从angular2中的url获取查询参数?的更多相关文章

  1. Structs2 中拦截器获取请求参数

    前言 环境:window 10,JDK 1.7,Tomcat 7 测试代码 package com.szxy.interceptor; import java.util.Map; import jav ...

  2. MVC中使用UpdateModel获取接口参数

    废话少说,直接上代码: 模型类定义: public class RequestModel { public string Name { get; set; } public float Age { g ...

  3. Thinkphp中路由Url获取的使用方法

    Thinkphp是一个体系较为完整的框架,很多地方比国外的框架功能都全,唯一不喜之处是性能,和传说中的.NET有点像. Thinkphp提供较全url处理体系,通过同一规则实现Url的路由和Url生成 ...

  4. Objective-C中把URL请求的参数转换为字典

    上一篇博客中是把URL转换为字典,那么我们如何把URL请求中的参数封装成字典,然后再封装成数组呢?对OC中字符串操作熟练的小伙伴们应该觉得这是一个a+b的问题,没错把URL中的参数转换为字典主要是对字 ...

  5. 将url的查询参数解析成字典对象

    1, 这个题目不约而同的出现在了多家公司的面试题中,当然也是因为太过于典型,解决方案无非就是拆字符或者用正则匹配来解决,我个人强烈建议用正则匹配,因为url允许用户随意输入,如果用拆字符的方式,有任何 ...

  6. android中使用DisplayMetrics获取屏幕参数

    --关于Density int android.graphics.Bitmap.getDensity(),返回bitmap-density(密度).默认的density就是当前display-dens ...

  7. angular中通过$location获取路径(参数)的写法

    以下获取与修改的 URL 以  ( http://172.16.0.88:8100/#/homePage?id=10&a=100  ) 为例 [一]获取 (不修改URL) //1.获取当前完整 ...

  8. laravel 中的 toSql 获取带参数的 sql 语句

    默认情况下,toSql 获取到的 sql 里面的参数使用 "?" 代替的,如下: DB::table('user')->where('id', 1)->toSql(); ...

  9. gin的url查询参数解析

    gin作为go语言最知名的网络库,在这里我简要介绍一下url的查询参数解析.主要是这里面存在一些需要注意的地方.这里,直接给出代码,和运行结果,在必要的地方进行分析. 代码1: type Struct ...

随机推荐

  1. 最大整数(Noip1998连接多位数)

    最大整数(Noip1998连接多位数)[问题描述] 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:343312 ...

  2. js中的getBoundingClientRect()函数

    在Chrome上,此函数返回结果包含x,y,它们的取值对应于left,top.但是x,y这种表示方式非常不直观(需要先理解x轴和y轴的方向),而left,top则清晰无歧义地表达了元素的位置.正是因此 ...

  3. 用UltraEdit判断打开文件的编码类型 用UltraEdit或notepad记事本查看文件编码格式 用UltraEdit查看当前文件编码

    用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSI/ANSCI--- ...

  4. Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决

    一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...

  5. Linux下使用Nexus搭建Maven私服

    在开发过程中,有时候会使用到公司内部的一些开发包,显然把这些包放在外部是不合适的.另外,由于项目一直在开发中,这些内部的依赖可能也在不断的更新.可以通过搭建公司内部的Maven服务器,将第三方和内部的 ...

  6. Docker stop停止/remove删除所有容器

    原文地址:https://blog.csdn.net/superdangbo/article/details/78688904 docker ps // 查看所有正在运行容器$ docker stop ...

  7. hashCode和identityHashCode底层是怎么生成的

          前言:在工作中使用==埋下的坑这篇博文的最后,我想到了两个问题,其中一个是——为什么 int int1=99;int int2=99;int1和int2的identityHashCode是 ...

  8. 如何快速学会android的四大基础----Service篇

    很多人都以为,只要学过一点java就可以马上写android应用了,这种想法的产生非常自然,因为现在网上有那么多的android开源实例,只要跟着来,也能够自己写一个播放器.但是,只有去写一个真正投入 ...

  9. sort_area_size,sort_area_retained_size

    sort_area_sizeoracle不建议设置sort_area_size参数.除非实例被配置成了共享服务器模式.默认值已经足够满足大多数OLTP系统.如果是OLAP.批任务.创建大的索引,可能需 ...

  10. Android MediaPlayer和VideoView的使用

          MediaPlayer MediaPlayer类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频.它支持三种不同的媒体来源: 本地资源 内部 ...