Angular 7 ngBuild:require(filename)不能在forRoot()方法中传递

时间:2019-01-21 17:37:58

标签: angular typescript dependency-injection require

我正在尝试将资产的缓存清除文件名作为我拥有的模块组件的参数传递:

  • ../ assets / svg / generation / sprint.svg //文件存在
  • 然后我要require('../assets/svg/generated/sprint.svg')生成缓存无效文件'sprite-345234dfg54gh6422111111.svg'
  • 并在我的组件中使用此文件名

AppModule:

const SPRITE_SRC = {
    raw: '../assets/generated/svg/sprite.svg',
    required: require('../assets/generated/svg/sprite.svg')
};

console.log(SPRITE_SRC)
// output OK : {
//    raw : '../assets/generated/svg/sprite.svg',
//    required: 'sprite-345234dfg54gh6422111111.svg'
// }

@NgModule({
    entryComponents: [...],
    declarations: [...],
    imports: [
        SvgSpriteModule.forRoot(SPRITE_SRC),
    ]
})
export class AppModule {}

SvgSpriteModule(这里一切正常):

export interface SvgSpriteConfig {
    raw: string;
    required: string;
}

export const PaCommonSvgSpriteConfig = new InjectionToken<SvgSpriteConfig>('SvgSpriteConfig');

export class SvgSpriteModule {
    static forRoot(config?: SvgSpriteConfig): ModuleWithProviders {
        return {
            ngModule: SvgSpriteModule,
            providers: [{ provide: PaCommonSvgSpriteConfig, useValue: config }]
        };
    }
}

但是当我尝试将此配置加载到SvgSpriteModule的组件中时,required属性消失了……:

export class SvgSpriteComponent {
    constructor(@Inject(PaCommonSvgSpriteConfig) private config: SvgSpriteConfig) {
        console.log('SvgSpriteComponent', config);
        // output KO : {
        //    raw : '../assets/generated/svg/sprite.svg'
        // }
    }
}

我花了3个小时不知不觉地尝试了一下……要求功能似乎是同步的,但也许是异步的? 我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

最后不可能...

最后我创建了一个带有缓存文件名的精灵。 然后,就在那之后,我有了一个shell脚本,它将找到新创建的sprite的文件名(由于哈希,其ID是动态的)……然后创建一个仅包含...的打字稿文件…… >

export const SvgSpritePath = 'assets/svg/sprite-4c6d366c.svg';

通过这种方式,可以轻松导入此文件,并将其作为参数传递给forRoot()方法(以在我的内部angular common lib中初始化自定义组件)