无法注入ActivatedRouteSnapshot

stu*_*rsi 39 typescript angular2-routing angular

将ActivatedRouteSnapshot注入组件不起作用(也没有注入ActivatedRoute).这里的堆栈跟踪:

"Error: Can't resolve all parameters for ActivatedRouteSnapshot: (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?).
at SyntaxError.ZoneAwareError (http://localhost:4200/polyfills.bundle.js:7042:33)
at SyntaxError.BaseError [as constructor] (http://localhost:4200/vendor.bundle.js:73735:16)
at new SyntaxError (http://localhost:4200/vendor.bundle.js:6140:16)
at CompileMetadataResolver._getDependenciesMetadata (http://localhost:4200/vendor.bundle.js:19345:31)
at CompileMetadataResolver._getTypeMetadata (http://localhost:4200/vendor.bundle.js:19220:26)
at CompileMetadataResolver._getInjectableMetadata (http://localhost:4200/vendor.bundle.js:19208:21)
at CompileMetadataResolver.getProviderMetadata (http://localhost:4200/vendor.bundle.js:19450:40)
at http://localhost:4200/vendor.bundle.js:19408:49
at Array.forEach (native)
at CompileMetadataResolver._getProvidersMetadata (http://localhost:4200/vendor.bundle.js:19375:19)
at CompileMetadataResolver.getNonNormalizedDirectiveMetadata (http://localhost:4200/vendor.bundle.js:18848:30)
at CompileMetadataResolver._loadDirectiveMetadata (http://localhost:4200/vendor.bundle.js:18736:23)
at http://localhost:4200/vendor.bundle.js:18937:54
at Array.forEach (native)
at CompileMetadataResolver.loadNgModuleDirectiveAndPipeMetadata (http://localhost:4200/vendor.bundle.js:18936:41)"
Run Code Online (Sandbox Code Playgroud)

在组件中,ActivatedRouteSnapshot注入如下:

constructor([...], private router: Router,
          private route: ActivatedRouteSnapshot) {
    [...]
}
Run Code Online (Sandbox Code Playgroud)

ActivatedRouteSnapshot提供于app.component.ts:

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css'],
    providers: [[...], ActivatedRouteSnapshot]
})
Run Code Online (Sandbox Code Playgroud)

我试图访问查询参数类似于如何在这里完成:https://stackoverflow.com/a/38997116/3433306

根据文档,它应该像添加到构造函数参数一样简单:https://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html

成功注入ActivatedRouteSnapshot我缺少什么?

Mar*_*ers 103

使用ActivatedRoute而不是ActivatedRouteSnapshot.然后你可以像这样使用快照:

constructor(activatedRoute: ActivatedRoute) { 
  var snapshot = activatedRoute.snapshot;
}
Run Code Online (Sandbox Code Playgroud)

  • @Akshay显然,`ActivatedRouteSnapshot`不是提供者,不能注入(见原始问题下面的评论).但是,如果注入`ActivatedRoute`,则可以访问随附的快照. (7认同)
  • 如果您了解activatedRoute 和ActivatedRouteSnapshot 之间的主要区别,那么我将很容易理解为什么ActivatedRouteSnapshot 注入错误。Diff => 由于 ActivatedRoute 可以重用,ActivatedRouteSnapshot 是一个不可变对象,代表 ActivatedRoute 的特定版本。它将与 ActivatedRoute 相同的所有属性公开为普通值,而 ActivatedRoute 将它们公开为可观察的。ActivatedRouteSnapshot 正在解析,当其中一个路由激活时,它会被调用。 (3认同)
  • 我不明白为什么会引起问题? (2认同)