2017-05-26 22 views
5

將ActivatedRouteSnapshot注入組件不起作用(並且兩者都不注入ActivatedRoute)。這裏堆棧跟蹤:無法注入ActivatedRouteSnapshot

"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)" 

在組件中,ActivatedRouteSnapshot注入如下:

constructor([...], private router: Router, 
      private route: ActivatedRouteSnapshot) { 
    [...] 
} 

ActivatedRouteSnapshot在app.component.ts提供:

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

我試圖訪問查詢同樣PARAMS它是如何在這裏完成:https://stackoverflow.com/a/38997116/3433306

按照文檔應該是簡單,因爲它增加了構造函數的參數:https://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html

我是什麼缺少成功注入ActivatedRouteSnapshot?

+1

AFAIK'ActivatedRouteSnapshot'不是供應商。只要你的應用程序路由器連接到你的組件,你可以簡單地將快照注入到其中,而不需要其他任何東西。 – Zircon

+1

從'providers:[[...],ActivatedRouteSnapshot]''中刪除'ActivatedRouteSnapshot''。它由路由模塊自動提供 –

+0

當我從提供程序列表中刪除它時,出現錯誤:錯誤:./LoginPageComponent類LoginPageComponent - 內聯模板中的錯誤:6:10由以下原因引起:沒有ActivatedRouteSnapshot!提供程序!我試圖在LoginFormComponent中注入錯誤中提到的LoginPageComponent的子項) – studersi

回答

22

使用ActivatedRoute而不是ActivatedRouteSnapshot。然後你可以使用這樣的快照:

constructor(activatedRoute: ActivatedRoute) { 
    var snapshot = activatedRoute.snapshot; 
} 
+0

這樣做的竅門,謝謝! – studersi

+1

我無法理解爲什麼會造成問題? – Akshay

+2

@Akshay顯然,'ActivatedRouteSnapshot'不是提供者,不能被注入(參見原始問題下的註釋)。但是,如果注入'ActivatedRoute',則可以訪問隨附的快照。 – studersi