Angular2:从URL访问查询参数,提供错误

时间:2018-05-05 10:44:55

标签: angular angular-router query-parameters

我试图从网址中提取查询参数

https://localhost:8080/myapp/shared?id1=2&id2=4

我需要在id1中使用id2app.component.ts值。我试图使用Router, ActivatedRoute, Params from '@angular/router',但是当我运行应用程序时,主页面未加载,我在浏览器控制台中看到以下错误:

Error: StaticInjectorError[t]: 
 StaticInjectorError[t]: 
   NullInjectorError: No provider for t!
Stack trace:


LMZF/</yi</t.prototype.get@http://localhost:8081/myapp/main.a7059837ce4dd4ad4d9f.bundle.js:1:293926
y/<@http://localhost:8081/myapp/main.a7059837ce4dd4ad4d9f.bundle.js:1:237630
y@http://localhost:8081/myapp/main.a7059837ce4dd4ad4d9f.bundle.js:1:237237

这就是我app.component.ts的样子:

import { Component, Input, OnInit } from '@angular/core';
import { HeaderComponent } from './header/header.component';
import {Router, ActivatedRoute, Params} from '@angular/router'; //added this import statement

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
  })

export class AppComponent implements OnInit {

constructor(private activatedRoute: ActivatedRoute) {}
// added following code for query params
ngOnInit() {
  // subscribe to router event
 this.activatedRoute.params.subscribe((params: Params) => {
     let userId = params['id1'];
     console.log("parameter is: "+ userId);
    });
}


   title = 'My First Angular App';
}

问题是,我添加了Router代码导致错误,甚至没有加载上面的url。当我尝试在没有查询参数代码的情况下运行应用程序时,它运行正常。

this answer尝试了此解决方案。还调查了另一个similar question,但没有帮助。

有人可以解释为什么会这样吗?

更新

app.module.ts中添加了以下导入声明:

imports: [
BrowserModule,
HttpModule,
RouterModule.forRoot([{
            path: '',
            component: AppComponent
        },
])

现在,这会使应用程序加载,但仍然不会提取参数。它在浏览器控制台上出现以下错误:

Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'shared'

更新2

为各个URL添加路径路径可以解决控制台错误问题,但我的参数仍未定义。

RouterModule.forRoot([{
        path: '',
        component: AppComponent
    },
    {
        path: 'shared',
        component: AppComponent
    },

])

1 个答案:

答案 0 :(得分:0)

您正在访问路由模块中指定的路由参数,例如/ user /:uid。对于查询参数:

export class AppComponent implements OnInit {

constructor(private activatedRoute: ActivatedRoute) {}
// added following code for query params
ngOnInit() {
  // subscribe to router event
 this.activatedRoute.queryParams.subscribe((params: Params) => {
     let userId = params['id1'];
     console.log("parameter is: "+ userId);
    });
}

您也可以使用ActivatedRouteSnapshot:

import { ActivatedRouteSnapshot } from '@angular/router';

export class AppComponent implements OnInit {

constructor(private route: ActivatedRouteSnapshot) {}
// added following code for query params
ngOnInit() {
     console.log("all parameters: ", this.route.queryParamMap.getAll);
}