我在ngUpgraded AngularJS控制器中遇到依赖注入问题 . 我想在我的混合应用程序中使用toastr和Handlebars.js模块,但我的每次尝试都给了我错误(处理器是很久以前从服务器端处理外部脚本所必需的,这就是为什么我需要使用它一些反模式解决方案) . 最后一个脚本(提供程序)仅适用于jQuery用法 .

AngularJS控制器:

export const dataVisualization = {
        selector: 'dataVisualizationNgJs',
        templateUrl: './data-visualization-ngjs.template.html',
        bindToController: {
            data: '='
        },
        controller: ['$scope', '$timeout', ($scope, $timeout) => {
          ....
       }
    Directive({
        selector: dataVisualization.selector
    })
    export class DataVisualizationFacade extends UpgradeComponent {
        @Input() data: any;

        constructor(elementRef: ElementRef, injector: Injector) {
            super(dataVisualization.selector, elementRef, injector);
        }
    }

AngularJS模块:

export const ngjsModule = angular.module('dataVisualizationNgJs', [])
        .component(dataVisualization.selector, dataVisualization).directive(DataVisualizationComponent.selector, downgradeComponent({
            component: DataVisualizationComponent,
        }) as angular.IDirectiveFactory);

Angular 5模块:

@NgModule({
        declarations: [
            DataVisualizationComponent,
            DataVisualizationFacade,
        ],
        entryComponents: [
            DataVisualizationComponent
        ],
        imports: [
            NgbModule,
            GatewaySharedModule,
            RouterModule.forChild(DataVisualizationRoute),
            FormsModule,
            UpgradeModule,
        ],
        providers: [
            jQueryProvider,
            toastrProvider,
            handlebarsProvider,
            {
                provide: '$scope',
                useFactory: (i) => i.get('$rootScope'),
                deps: ['$injector']
            }
        ]
    })

    export class DataVisualizationModule {
    }

Angular 5提供者:

export const JQUERY_TOKEN = new InjectionToken('jQuery');

    export const jQueryFactory = () => {
        return $;
    };

    export const jQueryProvider = {
        provide: JQUERY_TOKEN,
        useFactory: jQueryFactory
    };

    export const TOASTR_TOKEN = new InjectionToken('toastr');

    export const toastrFactory = () => {
        return toastr;
    };

    export const toastrProvider = {
        provide: TOASTR_TOKEN,
        useFactory: toastrFactory
    };


    export const HANDLEBARS_TOKEN = new InjectionToken('Handlebars');

    export const handlebarsFactory = () => {
        return Handlebars;
    };

    export const handlebarsProvider = {
        provide: HANDLEBARS_TOKEN,
        useFactory: handlebarsFactory
    };