Angular2 Неожиданное значение в службе. Добавьте аннотацию
В моем приложении Angular2 появляется следующая ошибка Ошибка: (SystemJS) Неожиданное значение 'ReleasesService', объявленное модулем 'AppModule'. Добавьте примечание @Pipe/@Directive/@Component.
Мой AppModule:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { routing } from './app.routes';
import { HttpModule } from '@angular/http';
import { SearchFilter } from '../app/search-filter.pipe';
import { ReleasesService } from '../app/releases/releases.service';
import { AppComponent } from './app.component';
import { HomeComponent } from '../app/home/home.component';
import { ReleasesComponent } from '../app/releases/releases.component';
import { DistroComponent } from '../app/distro/distro.component';
import { ContactComponent } from '../app/contact/contact.component';
@NgModule({
imports: [ BrowserModule, HttpModule, routing ],
declarations: [ AppComponent,
SearchFilter,
HomeComponent,
ReleasesComponent,
ReleasesService,
DistroComponent,
ContactComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Мой ReleasesService:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { IRelease } from './release';
import 'rxjs/add/operator/map';
@Injectable()
export class ReleasesService {
getReleases() {
return IRelease;
}
}
Как это исправить? Я переустановил Quickstarter (базу для моего приложения) и имел ту же ошибку при попытке создать службу.
Ответы
Ответ 1
declarations
предназначен только для декларируемых классов: Директивы компонентов и каналы
Вы можете добавить массив ReleasesService
в providers
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
providers: [ ReleasesService ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
См. также
Ответ 2
У меня была аналогичная проблема, возникающая, когда проект имел angular2 как зависимость и зависимость проекта (вместе с отказоустойчивым компонентом). Кажется, что метаданные angular2 привязаны к прямой зависимости angular2, поэтому компонент в зависимости от проекта не был объявлен в angular2 проекта.
Обходным решением является удаление angular2 из зависимостей (объявляя его как devDependency) и используйте только один экземпляр angular2.