Angular 2.0.0 Metadata_resolver странное поведение

Я переношу свое приложение из angular2 RC5 angular -webpack в angular 2 2.0.0 с angular cli beta 14.

Я борюсь с этими ошибками:

Неподготовленная ошибка: не удается разрешить все параметры для PublicInfoDao: (?,?). CompileMetadataResolver.getDependenciesMetadata @ metadata_resolver.js: 508CompileMetadataResolver.getTypeMetadata @ metadata_resolver.js: 405 (анонимная функция) @ metadata_resolver.js: 552CompileMetadataResolver.getProvidersMetadata @ metadata_resolver.js: 532CompileMetadataResolver.getNgModuleMetadata @ metadata_resolver.js: 285RuntimeCompiler._compileComponents @ runtime_compiler.js: 126RuntimeCompiler._compileModuleAndComponents @ runtime_compiler.js: 64RuntimeCompiler.compileModuleAsync @ runtime_compiler.js: 55PlatformRef _._ bootstrapModuleWithZone @ application_ref.js: 303PlatformRef_.bootstrapModule @ application_ref.js: 285 (анонимная функция) @ main.ts: 13__webpack_require__ @bootstrap db3609d...: 52 (анонимно функция) @. * $: 7__webpack_require__ @bootstrap db3609d...: 52webpackJsonpCallback @bootstrap db3609d...: 23 (анонимно функция) @main.bundle.js: 1

и

metadata_resolver.js: 278Uncaught Ошибка: Неожиданное значение "AppComponent", объявленный модулем "AppModule" (анонимная функция) @metadata_resolver.js: 278CompileMetadataResolver.getNgModuleMetadata @metadata_resolver.js: 265RuntimeCompiler._compileComponents @ runtime_compiler.js: 126RuntimeCompiler._compileModuleAndComponents @ runtime_compiler.js: 64RuntimeCompiler.compileModuleAsync @ runtime_compiler.js: 55PlatformRef _._ bootstrapModuleWithZone @ application_ref.js: 303PlatformRef_.bootstrapModule @ application_ref.js: 285 (анонимная функция) @ main.ts: 13__webpack_require__ @bootstrap db3609d...: 52 (анонимно функция) @. * $: 7__webpack_require__ @bootstrap db3609d...: 52webpackJsonpCallback @bootstrap db3609d...: 23 (анонимно функция) @main.bundle.js: 1 1: https://github.com/preboot/angular2-webpack

Это странное поведение, потому что я удаляю несколько компонентов, с которыми работает приложение. Но если добавить простой компонент вроде:

@Component({
  selector: 'tl-result-item',
  templateUrl: "./resultitem.component.html",
  styleUrls: ["./resultitem.component.scss"]
})
export class ResultItemComponent {

  @Input()
  result:Result;

  constructor(){}
}

Выдается вторая ошибка. Если я прокомментирую @Input(), приложение работает. Есть некоторые услуги, если я раскомментирую приложение, бросает ту же ошибку, и если я прокомментирую некоторые строки, ошибка исчезнет.

Я схожу с ума от этих ошибок. Я думаю, что это должна быть внешняя проблема.

Любая идея?

Update:

Первая ошибка может быть связана с https://github.com/AngularClass/angular2-webpack-starter#frequently-asked-questions (второй вопрос) У меня есть несколько проблем для перехода на angular 2.0.0 final.

Update2:

@NgModule({
  providers: [
    MetaService,
    Title,
    HttpInterceptor,
    {provide: ConnectionBackend, useClass: XHRBackend},
    {provide: Http, useExisting: HttpInterceptor},
    {provide: Configuration, useClass: ConfigurationDevelopment}
  ],
  imports: [
    BrowserModule,
    HttpModule,
    FormsModule,
    ReactiveFormsModule,
    // APP_ROUTER_PROVIDERS
  ],
  declarations: [
    AppComponent,
    ResultItemComponent,

    TimestampToMomentPipe,
    TimestampToTimePipe
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

Update3: Другой пример кода, который не работает в angular cli.

Этот код работает правильно:

this.publicService.all().subcribe(response => {
      console.log(response);
});

Этот код не работает:

this.publicService.all().subcribe(response => {
      deserialize(response)
});

Исключение, описанное выше:

Неподготовленная ошибка: не удается разрешить все параметры для PublicInfoDao: (?,?).

¿¿??

Ответы

Ответ 1

environment.ts

// Angular 2
// rc2 workaround
import { enableDebugTools, disableDebugTools } from '@angular/platform-browser';
import { enableProdMode, ApplicationRef } from '@angular/core';
// Environment Providers
let PROVIDERS: any[] = [
  // common env directives
];

// Angular debug tools in the dev console
// https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md
let _decorateModuleRef = function identity<T>(value: T): T { return value; };

if ('production' === ENV) {
  // Production
  disableDebugTools();
  enableProdMode();

  PROVIDERS = [
    ...PROVIDERS,
    // custom providers in production
  ];

} else {

  _decorateModuleRef = (modRef: any) => {
    const appRef = modRef.injector.get(ApplicationRef);
    const cmpRef = appRef.components[0];

    let _ng = (<any>window).ng;
    enableDebugTools(cmpRef);
    (<any>window).ng.probe = _ng.probe;
    (<any>window).ng.coreTokens = _ng.coreTokens;
    return modRef;
  };

  // Development
  PROVIDERS = [
    ...PROVIDERS,
    // custom providers in development
  ];

}

export const decorateModuleRef = _decorateModuleRef;

export const ENV_PROVIDERS = [
  ...PROVIDERS
];

app.module.ts

@NgModule({
  providers: [
 // expose our Services and Providers into Angular"s dependency injection
        ENV_PROVIDERS
  ],
  imports: [
    BrowserModule,
    HttpModule,
    FormsModule,
    ReactiveFormsModule,
    // APP_ROUTER_PROVIDERS
  ],
  declarations: [
    AppComponent,
    ResultItemComponent,

    TimestampToMomentPipe,
    TimestampToTimePipe
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

Ответ 2

Возможно, вы используете экспортные баррели:

export * from 'some-file';
export * from 'another-file';

в этом случае вы можете столкнуться с круговыми зависимостями, хотя исходный код сам по себе не имеет круговых зависимостей.

Иногда сообщение об ошибке

Не удается разрешить все параметры (некоторые, штуки,?)

указывает, что у вас есть циклическая зависимость.

Вы можете попробовать импортировать свои компоненты, указав нужный файл напрямую, без использования экспортных баррелей в файле index.ts

возможно, вы захотите изучить этот вопрос:

Импорт ствола появляется, чтобы разорвать порядок загрузки


... ваш вопрос может фактически быть дубликатом этого: -)

Angular 2 Ошибка DI - ИСКЛЮЧЕНИЕ: невозможно разрешить все параметры