tag route page change based angular angular2-di

route - Angular 2 Di no funciona-no puede resolver todos los parámetros para



title angular 4 (3)

He creado una aplicación simple de Hello World que funciona bien. Pero cuando quiero agregar un "Servicio" solo un simple Di obtuve los siguientes errores:

angular2.dev.js: 23877 EXCEPCIÓN: No se pueden resolver todos los parámetros para ''AppComponent'' (?). Asegúrese de que todos los parámetros estén decorados con Inject o tengan anotaciones de tipo válidas y que ''AppComponent'' esté decorado con Injectable.

angular2-polyfills.js: 469 Rechazo de promesa no controlada: No se pueden resolver todos los parámetros para ''AppComponent'' (?). Asegúrese de que todos los parámetros estén decorados con Inject o tengan anotaciones de tipo válidas y que ''AppComponent'' esté decorado con Injectable. ; Zona: angular; Tarea: Promise.then; Valor:

Tengo 3 archivos

boot.ts:

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> import {bootstrap} from ''angular2/platform/browser'' import {AppComponent} from ''./mainApp'' bootstrap(AppComponent);

mainApp.ts:

import {Component} from ''angular2/core''; import {CourseService} from ''./course.service''; @Component({ selector: ''my-app'', template: ''My First Angular 2 App'', providers: [CourseService], }) export class AppComponent { constructor(courseService: CourseService) { } }

curso.servicio.ts:

export class CourseService { public getCourses(): string[] { let courses: string[] = ["Course 1", "Course 2", "Course 3"]; return courses; } }

Cuando elimino los parámetros del constructor, todo funciona bien.

ese es el encabezado de mi documento HTML y puedo usar angular 2 beta 13:

<script src="~/Scripts/es6-shim.min.js"></script> <script src="~/Scripts/system-polyfills.js"></script> <script src="~/Scripts/shims_for_IE.js"></script> <script src="~/Scripts/angular2-polyfills.js"></script> <script src="~/Scripts/system.js"></script> <script src="~/Scripts/Rx.js"></script> <script src="~/Scripts/angular2.dev.js"></script> <!-- 2. Configure SystemJS --> <script> System.config({ packages: { ''ScriptsApp/views'': { defaultExtension: ''js'' } } }); </script> <script> System.import(''ScriptsApp/views/boot'').then(null, console.error.bind(console)); </script>

Actualizar estos son AHORA mi Configuración csproj TypeScript fija

<TypeScriptTarget>ES5</TypeScriptTarget> <TypeScriptJSXEmit>None</TypeScriptJSXEmit> <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> <TypeScriptModuleKind>CommonJS</TypeScriptModuleKind> <TypeScriptRemoveComments>False</TypeScriptRemoveComments> <TypeScriptOutFile /> <TypeScriptOutDir /> <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations> <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError> <TypeScriptSourceMap>True</TypeScriptSourceMap> <TypeScriptMapRoot /> <TypeScriptSourceRoot /> <TypeScriptExperimentalDecorators>True</TypeScriptExperimentalDecorators> <TypeScriptEmitDecoratorMetadata>True</TypeScriptEmitDecoratorMetadata>

En la actualización más reciente de VS 2015, también puede usar tsconfig.json, luego se ignoran las configuraciones de la solución para TypeScript. Mi ejemplo actual para mi tsconfig.json:

{ "compilerOptions": { "target": "es5", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false, //Kümmert sich um die Typings das diese entsprechend gefunden werden, keine Reference mehr in boot.js notwendig. Geht aber in VS nicht! //"lib": ["es6"], "types": [ "node" //wird für RequireJs benötigt, damit z.b. der Typ gefunden werden kann ] }, //Wird für den AwesomeTypeScriptLoad in WebPack benötigt! "awesomeTypescriptLoaderOptions": { "useWebpackText": true }, "exclude": [ "node_modules", "dist", "typings/main", "typings/index.d.ts" ], "compileOnSave": true }


En mi caso el problema fue causado por @ angular / forms. Si lo está utilizando cerca del componente defectuoso, comience a verificar su @ angular / formas y encuentre una solución a su alrededor.


Pude resolver este problema agregando:

import {Inject} from ''@angular/core'';

en el componente y anotando el servicio a inyectar:

constructor(@Inject(CourseService) courseService: CourseService) {


Actualizar

Después de que la actualización en la pregunta OP ya está utilizando Typescript, le sugiero que agregue emitDecoratorMetadata: true dentro de su tsconfig.json . Es necesario para que la salida de JavaScript cree los metadatos para los decoradores dentro de un archivo de script transpilado.

@Inject agregar @Inject para crear una instancia de CourseService dentro de AppComponent

constructor(@Inject(CourseService) courseService: CourseService) { }

En el caso de que esté utilizando @Inject no necesita tener el decorador @Inject en su lugar. Mecanografiado hecho eso para ti