尝试使用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已更新)...
答案 0 :(得分:10)
从
中删除RouteParams
bootstrap(AppComponent, [ROUTER_PROVIDERS, RouteParams]);
RouteParams
由路由器提供。如果您自己提供注入失败。
有关示例,请参阅https://angular.io/api/router/Params。 RouteParams
只能注入路由器添加的组件。
答案 1 :(得分:3)
在看到Günter的正确和接受的答案后,我想添加一个我自己的答案(我问原来的问题)。
这对我的情况来说真的太过分了:我没有路由(我只有一页单页应用程序),所以我必须:
<router-outlet></router-outlet>
)最后我能够查询字符串参数...
在我的情况下(只有一个参数),我只是做了这个单线程(分布在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
另见 -