使用forRoot的Angular库

问题描述

我正在设置一个我希望其他项目使用的库。 我正在尝试将配置文件传递给我已定义的模块:

@NgModule({
  declarations: [ImageComponent],imports: [CommonModule],})
export class ImagesModule {
  static forRoot(config: ImagesConfig): ModuleWithProviders<ImagesModule> {
    return {
      ngModule: ImagesModule,providers: [{ provide: ImagesConfig,useValue: config }],};
  }
}

export class ImagesConfig {
  cloudName: string;
}

这看起来还可以,但是现在我想在实际模块中使用 cloudName ,如下所示:

@NgModule({
  declarations: [ImageComponent],imports: [
    CommonModule,CloudinaryModule.forRoot(Cloudinary,{
      config.cloudName,}),],};
  }
}

export class ImagesConfig {
  cloudName: string;
}

这可能吗?如果是这样,我该怎么办?


我已经这样创建了模块:

import { ModuleWithProviders,NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ImageComponent } from './image.component';

import { CloudinaryModule } from '@cloudinary/angular-5.x';
import * as Cloudinary from 'cloudinary-core';

import { ImagesConfig } from './images-config';
import { IMAGES_CONFIG } from './images-config.token';

@NgModule({
  declarations: [ImageComponent],providers: [
        { provide: IMAGES_CONFIG,useValue: config },...CloudinaryModule.forRoot(Cloudinary,{
          cloud_name: config.cloudName,}).providers,};
  }
}

images-config.ts images-config.token.ts 分别如下所示:

export interface ImagesConfig {
  cloudName: string;
}

import { InjectionToken } from '@angular/core';

export const IMAGES_CONFIG = new InjectionToken('IMAGES_CONFIG');

当我尝试在 public-api.ts 中使用时:

/*
* Public API Surface of situ-angular-components
*/

export * from './lib/images/images-config';


export * from './lib/images/images.module';

所有这些都可以编译,但是如果我尝试构建库,则会出现此错误:

enter image description here


不幸的是,@ yurzui提供的答案似乎无效。 如果我将模块更改为此:

@NgModule({
  declarations: [ImageComponent],{ cloud_name: 'demo' }),})
export class ImagesModule {}

构建我的库,它可以工作。 如果我这样做:

@NgModule({
  declarations: [ImageComponent],};
  }
}

当我尝试构建库时,出现错误提示:

如果“ cl-image”是Angular组件,请验证它是否属于此模块。

我正在 ImageComponent 中使用 cl-image

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)