Angular Инъекционный декоратор - Ожидаемые 0 аргументов, но получил 1

Я только начинаю с базового учебника по Angular, но столкнулся с небольшой проблемой компиляции.

Я следую учебному пособию на веб-сайте Angular. Я застрял с частью внедрения зависимости, потому что она не хочет компилироваться.

В уроке они просят создать сервис с:

ng generate service hero

В этом сгенерированном сервисе у вас есть такой декоратор:

@Injectable()

Затем они просят добавить параметр к этому декоратору следующим образом:

@Injectable({
  providedIn: 'root'
})

Когда я пытаюсь это сделать, у меня появляется ошибка TypeScript, говорящая мне:

ошибка TS2554: ожидалось 0 аргументов, но получено 1. Версии, которые я использую:

Angular CLI: 1.7.4
Node: 9.5.0
OS: win32 x64
Angular: 5.2.10
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cli: 1.7.4
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.5.3
webpack: 3.11.0

Есть идеи, почему он не принимает параметр?

Заранее спасибо !

Ответ 1

Это новая функция в Angular 6.

@Injectable({
  providedIn: 'root'
})

У вас есть два варианта:

1) Обратитесь к документации Angular 5. (Как отмечает @r-richards - измените версию документов на v5 в раскрывающемся списке внизу левой панели.)

2) Обновите ваш проект до Angular 6, чтобы исправить проблему

Следуйте официальному руководству по обновлению Angular.

Вы заполните небольшую форму, выбирая, на какую версию Angular вы работаете и какую версию хотите обновить. Затем он показывает вам список необходимых шагов для выполнения обновления. Вы должны следовать этому руководству для всех обновлений. (Пожалуйста, подтвердите, прежде чем уйти) :)

https://update.angular.io/

enter image description here

Вот некоторые заметки, которые я сделал при обновлении с Angular 5 до Angular 6.

Ваш пробег может варьироваться в зависимости от вашей конфигурации. Я связался с парой статей ниже, которые помогли мне.

Обновление npm (Node Package Manager)

npm install [email protected] -g 

Upgarde узел

Для пользователей Windows и Mac самый простой способ - использовать официальный установщик Node. Или см. Статью ниже для Linux/Unix.

https://nodejs.org/en/download/

Upgarde Angular CLI глобально и локально

npm install -g @angular/cli
npm install @angular/cli

Обновление package.json

ng update @angular/cli

Обновление @Angular/Core

ng update @angular/core

Обновите угловой материал, если вы его используете

ng update @angular/material

Проверьте другие пакеты, которые, возможно, должны быть обновлены

npm outdated

Обновите все устаревшие пакеты

npm update

Или обновить конкретный пакет

npm update <package name>

Вам может потребоваться преобразовать файл angular-cli.json в angular.json

ng update @angular/cli --migrate-only --from=1.7.4

Рекомендации:

Обновление узла

http://www.hostingadvice.com/how-to/update-node-js-latest-version/

Обновление Угловой

https://vitalflux.com/upgrade-angular-5-app-angular-6/

Другие шаги по устранению неполадок

fooobar.com/questions/1696141/...

Ответ 2

У меня также была эта проблема, и я решил ее, включая имя службы классов в "Поставщиках" в app.module.ts.

как это:

@NgModule({
    declarations:[

    ],
    imports:[
        CommonModule,
        HttpClientModule
    ],
    exports:[

    ],
    providers: [
        PostListService 
    ]
})