Как объявить службу с помощью Angular5

У меня есть служба Angular, которая выглядит так

@Component({})
@Inject(ChromeDataService)
@Injectable()
export class MainDataService {

}

когда я запускаю ng build --prod, я получаю эту ошибку

ОШИБКА: не указан шаблон для компонента MainDataService

мое единственное предположение заключается в том, что служба Angular не обязательно должна быть компонентом? Поэтому я удалил аннотацию @Component, но тогда я получаю это:

ОШИБКА в: Неожиданное значение «MainDataService в /home/.../main.ts», объявленное модулем «SharedModule в /home/.../src/app/shared.module.ts». Пожалуйста, добавьте аннотацию @Pipe/@Directive/@Component.

А как мне создать сервис в Angular5?


person Alexander Mills    schedule 15.01.2018    source источник
comment
вашему сервису нужен только декоратор @Injectable()   -  person Ricardo    schedule 15.01.2018
comment
да, я думаю, да, я хочу, чтобы некоторые очки добавили ответ, спасибо!   -  person Alexander Mills    schedule 15.01.2018
comment
да, наверное, я имел в виду декоратор, а не аннотацию   -  person Alexander Mills    schedule 15.01.2018


Ответы (3)


Чтобы правильно использовать службу angular, вам нужно только injectable()

Вот пример

@Injectable()
export class myService {
 //some logic
}

затем в вашем app.module или в функциональном модуле вы добавляете службу в массив providers и чтобы угловой DI обрабатывал службу для вас.

@Component({
usual stuff with template, selector, css})
export class someComponent {
constructor(private myService: MyService){}
}

Конструктор скажет angular автоматически внедрить нужный вам сервис.

person Mike Tung    schedule 15.01.2018

вашему сервису нужен только декоратор @Injectable(). Вот так

import {Injectable} from '@angular/core'
import {Router} from '@angular/router'


@Injectable()
export class AuthService {

  constructor(private router: Router) {}


}
person Ricardo    schedule 15.01.2018
comment
Чем это отличается от моего ответа? - person Mike Tung; 15.01.2018

Вот как я объявляю сервисы в Angular:

@Injectable()
export class AuthService {
     ...
}

Я думаю, вам нужен только @Injectable декоратор. Возможно, ваша проблема связана с shared.module.ts.

person Juanlu    schedule 15.01.2018
comment
Это не отличается от моего ответа. - person Mike Tung; 15.01.2018
comment
извини @MikeTung, я не видел твоего ответа, когда начал писать. - person Juanlu; 15.01.2018