Angular 8 Dependency Injection Без TypeScript? - PullRequest
1 голос
/ 16 октября 2019

В настоящее время я следую инструкциям по переносу приложения AngularJS (1.5.x) на гибрид AngularJS / Angular 8. Было решено, что мы пока не будем использовать TypeScript и будем придерживаться JavaScript, транслируемого с Babel. Кажется, я ничего не могу найти о внедрении зависимостей в Angular без TypeScript.

app.module.js

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { UpgradeModule } from '@angular/upgrade/static';
import AppComponent from './app.component';
import angularJsModule from '../app/scripts/app';

@NgModule({
    imports: [
        BrowserModule,
        UpgradeModule
    ]
})

export default class AppModule {
    constructor(upgrade) {
        console.log('angular 8 plz?');
    }

    ngDoBootstrap() {
        this.upgrade.bootstrap(document.body, [angularJsModule.name], { strictDi: true });
    }
}

При запуске приложения я получаю Uncaught Ошибка: не удается разрешить все параметры для AppModule: (?).

Я полагаю, это потому, что UpgradeModule не вводится из-за отсутствия TypeScript? https://angular.io/guide/dependency-injection#dependency-injection-tokens

Я пытался установить this.upgrade = upgrade внутри конструктора, но это никогда не достигается, потому что Angular не знает, что такое upgrade.

Есть ли способ внедрить UpgradeModule без TypeScript?

Или это ошибка, с которой я сталкиваюсь из-за чего-то другого?

1 Ответ

1 голос
/ 16 октября 2019

Вы должны использовать Inject

Импорт:

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

Измененный конструктор:

constructor(@Inject(UpgradeModule) upgrade) {
  this.upgrade = upgrade;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...