【问题标题】:how can I use a selector of a library component?如何使用库组件的选择器?
【发布时间】:2019-11-15 20:04:02
【问题描述】:

我创建了一个库,我通过 npm 链接将其导入到我的应用程序中。该库由一个模块组成,该模块包含组件 A 和一个名为 app-sqv 的选择器。 在我的应用程序中,我有组件 B 和模板 B。在模板 B 中,我想使用选择器。

这当然可以通过内部组件实现,但在这里我无法做到这一点,也许是因为使用外部库有一些我没有考虑的东西? 我已经使用经典的 import 语句将组件 A 导入到组件 B 中。我也可以使用该组件中的功能,所以我排除了导入错误。

模块A.ts:

import { NgModule, } from '@angular/core';
import { AppSqvComponent } from './app-sqv.component';
@NgModule({
    imports: [],
    exports: [AppSqvComponent],
    declarations: [AppSqvComponent],
    providers: [],
})
export class EmptyTextModule { }

ComponentA.ts:

@Component({
    selector:    'app-sqv',
    templateUrl: './app-sqv.component.html',
    providers:  []
})

export class AppSqvComponent { .. }

ModuleB.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';


@NgModule({
  declarations: [
    AppComponent

  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

ComponentB.ts

import {AppSqvComponent} from 'node_modules/viewseq';

模板B.html

<div>
  <h1>
    Testing Library!
  </h1>
  <app-sqv></app-sqv>
</div>

组件B无法识别选择器app-sqv的错误状态。

【问题讨论】:

  • 您需要将ComponentA所在的模块声明/导出添加到该组件所在模块的imports数组中ComponentA 已声明。在您的情况下,应将 EmptyTextModule 添加到根模块中。

标签: angular typescript templates module components


【解决方案1】:

您需要在您的库的 public_api.tsexport 组件 A。

export * from './lib/ComponentA/component-A.component';

import你在app.module中的库模块:

import { MyLibraryModule } from 'my-library';

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    ...
    MyLibraryModule 
  ],
  providers: [
  ],
  bootstrap: [AppComponent]
})

【讨论】:

  • 是的,对不起,我没有解释我已经在我的库的 public_api.ts 中导出了组件 A。我也尝试过像您在 app.module 中所说的那样导入模块,但它无法识别它......我不明白为什么它不能,因为我能够在 ComponentB 中导入它并实际使用它的功能...
  • 可以分享到stackbiltz吗?
  • 问题已解决:我使用“ng generate library”从头开始创建了一个新库,只是为了重新开始并复制我的旧组件代码。然后在我的 ts.config.json 中,我必须设置“module”:“esnext”和“target”:“es2015”。在我使用 es5 之前。我不是很明白,但是我认为这是编译过程中的问题,也许我使用了一些与我在配置中的设置不兼容的旧语法...无论如何谢谢你的帮助!!!
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多