首页 > 解决方案 > 没有 TypeScript 的 Angular 8 依赖注入?

问题描述

我目前正在关注将 AngularJS (1.5.x) 应用程序迁移到 AngularJS / Angular 8 混合的教程。我们已经决定暂时不使用 TypeScript,而是坚持使用 Babel 进行 JavaScript 转译。如果没有 TypeScript,我似乎在 Angular 中找不到任何关于依赖注入的信息。

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 });
    }
}

运行应用程序时,我收到未捕获的错误:无法解析 AppModule 的所有参数:(?)。

我认为这是因为没有 TypeScript 而没有注入 UpgradeModule? https://angular.io/guide/dependency-injection#dependency-injection-tokens

我已经尝试this.upgrade = upgrade在构造函数中进行设置,但由于 Angular 不知道是什么,所以从未达到过upgrade

有没有办法在没有 TypeScript 的情况下注入 UpgradeModule?

还是我遇到的错误是因为不同的原因?

标签: angulardependency-injectionangular-hybrid

解决方案


你必须使用Inject

进口:

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

改变构造函数:

constructor(@Inject(UpgradeModule) upgrade) {
  this.upgrade = upgrade;
}

推荐阅读