2017-05-26 16 views
5

ActivatedRouteSnapshotをコンポーネントに注入することは機能しておらず、どちらもActivatedRouteを注入していません。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] 
}) 

ここにスタックトレースは次のよう

"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を注入しますそれは、コンストラクタのパラメータに追加するのと同じくらい簡単であるべきドキュメントによるとhttps://stackoverflow.com/a/38997116/3433306

::私は、クエリにアクセスしようとしている

それがここで行われている方法と同様にparamsはhttps://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html

私は何ActivatedRouteSnapshotを正常に挿入するための行方不明?

+1

AFAIK 'ActivatedRouteSnapshot'はプロバイダではありません。あなたのコンポーネントにルーティングするあなたのアプリケーションのためのルータを持っている限り、あなたはそれにスナップショットを注入するだけで何も必要なくなります。 – Zircon

+1

'Provided:[[...]、ActivatedRouteSnapshot]'から 'ActivatedRouteSnapshot'を削除します。それはルーティングモジュールによって自動的に提供されます –

+0

プロバイダのリストからそれを削除すると、./LoginPageComponentクラスのError:Error LoginPageComponent - インラインテンプレート:6:10原因:ActivatedRouteSnapshotのプロバイダがありません!私はLoginFormComponentに、エラーに記載されたLoginPageComponentの子である)を注入しようとしています。 – studersi

答えて

22

ActivatedRouteSnapshotではなくActivatedRouteを使用してください。次に、このようなスナップショットを使用することができます:

+0

これはトリックでした、ありがとう! – studersi

+1

問題の原因を理解できませんでしたか? – Akshay

+2

@Akshay明らかに、 'ActivatedRouteSnapshot'はプロバイダではなく、注入できません(元の質問の下のコメントを参照)。ただし、 'ActivatedRoute'を挿入すると、それに付属のスナップショットにアクセスすることができます。 – studersi

関連する問題