typescript Angular 7/8 -如何在app组件中获取url参数

lf5gs5x2  于 2023-04-22  发布在  TypeScript
关注(0)|答案(7)|浏览(149)

我有单点登录的地方,但为了测试,我想从url localhost:4200/?id=test&name=testing&email=testing@test.com读取值,并将它们传递给应用程序组件中的API。
将有一个标志的基础上,我将从url阅读,而不是使用单点登录功能

if (url_enabled == true) {
    getParamsFromUrl()
 } else {
   singleSignOn()
 }

我尝试了ActivatedRoute,但似乎不起作用。
我试过queryParams, params, url, queryParamsMap,但这些似乎都不起作用。我得到的都是空值。
内部应用程序组件
app.component.ts

getParamsFromUrl() {
    this._router.events.subscribe((e) => {
      if (e instanceof NavigationEnd) {
        console.log(e.url)
      }
    })
  }

 this.route.queryParams.subscribe(params => {
      console.log(params);
    })

app.component.html

<router-outlet></router-outlet>

app-routing.module.ts

const routes: Routes = [
  {path:'*/:id', component: AppComponent},
];

我已经尝试了我在stackoverflow或其他博客上能找到的任何东西。有人能指出我在这里错过了什么吗?

bqujaahr

bqujaahr1#

对于此路线:您可以这样尝试:

const routes: Routes = [
   {path:'*/:id', component: AppComponent},
];

AppComponent .ts文件中:

constructor(
      private activatedRoute: ActivatedRoute,
    ) { }



    ngOnInit() {
      this.activatedRoute.params.subscribe(params => {
          const id = params['id'];
          console.log('Url Id: ',id);
    }

    OR

    ngOnInit() {
      this.activatedRoute.queryParams.subscribe(params => {
          const id = +params.id;
          if (id && id > 0) {
           console.log(id);
          }
      });
    }
6ie5vjzr

6ie5vjzr2#

首先,有一个像你这样的URL,其中包含queryParams:
localhost:4200/?id=test&name=testing&email=testing@test.com
通过这种方式,您可以使用ActivatedRoute对象访问queryparams,如:

this.name = this.activatedRoute.snapshot.queryParamMap.get('name'); // this.name = 'testing'

或者:

this.activatedRoute.queryParams.subscribe(params => {
       this.name= params['name'];
     });

另一种方法是
localhost:4200/test/testing/testing@test.com
用于同步检索(一次):

this.name = this.activatedRoute.snapshot.ParamMap.get('name');
bvjveswy

bvjveswy3#

Angular为我们提供了ActivatedRoute对象。我们可以以与上面相同的方式访问URL参数值,几乎没有区别。这种类型的数据可以通过两种不同的方式访问。一种是通过route.snapshot.paramMap,另一种是通过route.paramMap.subscribe。两者之间的主要区别是订阅将随着特定路由的参数更改而继续更新。

ngOnInit() {
    this.route.paramMap.subscribe(params => {
        this.userType = params.get("userType")
    })
}
9rygscc1

9rygscc14#

您需要创建新组件并更新工艺路线配置,如下所示:
首先,创建一个新组件:MainComponent

import { Component } from '@angular/core';

@Component({
  selector: 'main',
  template: `<router-outlet></router-outlet>`,
})
export class MainComponent {
  constructor() {  }
}

然后,更新AppModule

import { AppComponent } from './app.component';
import { MainComponent } from './main.component';

@NgModule({
  imports:      [ 
    BrowserModule, 
    FormsModule,
    RouterModule.forRoot([
      {path: '', component: AppComponent}
    ])
  ],
  declarations: [ MainComponent, AppComponent ],
  bootstrap:    [ MainComponent ]
})
export class AppModule { }

最后,您需要更新index.html文件(确保加载全新的组件,而不是AppComponent):

<main>loading</main>

现在您可以读取AppComponent中请求的参数:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
  params: Params;

  constructor(private route: ActivatedRoute){}

  ngOnInit() {
      this.route.queryParams.subscribe((params: Params) => {
        this.params = params;
        console.log('App params', params);
        const id = params['id'];
        console.log('id', id);
      });
  }
}

请参见此处的工作示例:https://read-params-app-component.stackblitz.io/?id=test&name=testing&email=testing@test.com
并找到源代码here
我希望它有帮助!

2nc8po8w

2nc8po8w5#

你可以这样试试

constructor(
  private activatedRoute: ActivatedRoute
)
ngOnInit() {
  this.activatedRoute.paramMap.pipe(
    tap(() => console.log(this.activatedRoute.snapshot.paramMap.get(
      "id"
    )))
  ).subscribe()
}
ztigrdn8

ztigrdn86#

@uirouter/core使用Transition可以很容易地从url获取参数。

import {Transition} from '@uirouter/core';

@Component()
export class MyComponent {
public myParam = this.transition.params().myParam;

public constructor(public transition: Transition) {}
}
lqfhib0f

lqfhib0f7#

我在angular 8中使用了jquery,并在app组件中声明后使用jquery $变量获得了href。

import { query } from '@angular/animations';

declare var $: any;

相关问题