首页 文章

Angular 4.1.3使用AOT时,Service Factory返回undefined

提问于
浏览
3

在我的Angular应用程序中,我使用共享服务,因为数据不断更新,所以我不需要成为单例 .

服务厂:

import {DataService} from '../../../../shared/services/data.service';
import {Http} from '@angular/http';

export const DataServiceProvider = {
    provide: DataService,
    useFactory(http: Http) {
        return new DataService(http);
    },
    deps: [Http]
};

当我在JIT模式下运行应用程序时,工厂工作正常,但是当我使用--aot标志构建时,我收到以下错误 .

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'get' of undefined
TypeError: Cannot read property 'get' of undefined

返回的服务有一个get()方法,它调用服务器 . 我无法理解AOT中打破这个看似简单的功能的原因 .

为了进一步参考,我在构造函数中注入了服务:

construct(
    dataService: DataService
) {
    super();
}

并在ngOnInit()中调用它:

ngOnOnit() {
    this.subscribe(this.dataService.get(), (res) => { this.data = res });
}

我有一些从我的组件抽象出来的订阅功能,它处理取消订阅以防止内存泄漏,这就是为什么代码看起来很奇怪的原因 .

1 回答

  • 3

    为了使AOT工作,所有功能都需要是静态可分析的 . 有关更多信息,请参见this Medium article . 由于您正在导出一个对象,并且该对象上有一个匿名函数,因此请尝试导出该函数 . 像这样更新你的工厂:

    import {DataService} from '../../../../shared/services/data.service';
    import {Http} from '@angular/http';
    
    export const DataServiceProvider = {
        provide: DataService,
        useFactory: dataServiceProviderUseFactory,
        deps: [Http]
    };
    export function dataServiceProviderUseFactory(http: Http) {
        return new DataService(http);
    }
    

相关问题