Angular 2错误:无法解析' RouteParams'

时间:2016-04-08 09:59:48

标签: routing angular

尝试使用RouteParams获取查询字符串参数,但我得到错误

  

无法解析' RouteParams'(?)的所有参数。确保所有   参数用Inject修饰或具有有效类型   注释和那些' RouteParams'用Injectable装饰。   angular2-polyfills.js:332错误:无法读取属性' getOptional'的   未定义.......

查看此Plnkr。如何在不收到此警告的情况下使用RouteParams?

重要文件是:

boot.ts

import {bootstrap} from 'angular2/platform/browser';
import {ROUTER_PROVIDERS, RouteParams} from 'angular2/router';
import {AppComponent} from './app/app.component';

bootstrap(AppComponent, [ROUTER_PROVIDERS, RouteParams]);

app.component.ts

import {Component, OnInit} from 'angular2/core';
import {RouteParams} from "angular2/router";

@Component({
  selector: 'app',
  template: `
    <p *ngIf="guid">guid gived is: {{guid}}</p>
    <p *ngIf="!guid">No guid given in query-string in URL</p>
  `
})
export class AppComponent implements OnInit {
  guid:string;

  constructor(private _params: RouteParams) {} //

  ngOnInit() {
    this.guid = this._params.get('guid');
  }

}

更新

我没有任何路由,我只有默认的根路由(如果我没有其他路由可以称之为路由......)。但正如Gianluca建议的那样,我添加了以下路由配置:

@RouteConfig([
  { path: '/:guid', name: 'Home', component: AppComponent, useAsDefault: true },
])

但我仍然得到同样的错误(Plnkr已更新)...

4 个答案:

答案 0 :(得分:10)

中删除RouteParams
bootstrap(AppComponent, [ROUTER_PROVIDERS, RouteParams]);

RouteParams由路由器提供。如果您自己提供注入失败。

有关示例,请参阅https://angular.io/api/router/ParamsRouteParams只能注入路由器添加的组件。

Plunker example

答案 1 :(得分:3)

在看到Günter的正确和接受的答案后,我想添加一个我自己的答案(我问原来的问题)。

这对我的情况来说真的太过分了:我没有路由(我只有一页单页应用程序),所以我必须:

  • 引入另一个“外部”组件(RouteConfig)
  • 使用路由器配置和路由器基本模板(使用<router-outlet></router-outlet>
  • 创建专用组件
  • 在我想使用查询字符串参数的组件中注入RouteParams

最后我能够查询字符串参数...

在我的情况下(只有一个参数),我只是做了这个单线程(分布在4行以便于阅读):

this.myParameter = window.location.href
  .slice(window.location.href.indexOf('?') + 1)
  .split('&')[0]
  .split('=')[1];

答案 2 :(得分:0)

您是否在@RouteConfig中指定了guid

@RouteConfig([
  {path: '/something/:guid', name: 'Something', component: Something}
])

答案 3 :(得分:0)

我不明白你的问题是正确的,但是正如你在评论中所说的那样

  

是否有另一种获取url查询参数的方法?

我们可以使用data属性发送 我们可以使用angualr2提供的data的{​​{1}}属性通过路由发送数据。通过使用此属性,我们可以在路由配置时将其他数据发送到组件,而不会在URL中显示它。这是这个属性的例子。

@RouteConfig annotation

通过使用它我们可以通过路由发送数据而不显示在URL中。

Plunker - working example of the same

了解更多信息,请阅读此awesome artical

另见 -