私有组件的用例

Use case for private components

我正在尝试为私有组件想出一个简单的用例,就在这里。假设我的模块 HelloWorldAppModule 带有一个 public 和一个私有组件:

@Component({
    selector: 'hello-world',
    template: `
    <div>
        <private></private>
    </div>`
})
class HelloWorldComponent {
}

@Component({
    selector: 'private',
    template: `<span>I am private</span>`
})
class PrivateComponent {
}


@NgModule({
    declarations: [HelloWorldComponent, PrivateComponent],
    exports: [HelloWorldComponent]
})
class HelloWorldAppModule {
}

如您所见,此模块仅导出 HelloWorldComponent,但是,在 HelloWorldComponent 的模板中使用了 PrivateComponent。这应该可以正常工作,因为两个组件都已在 declarations 中注册。

然后,我创建了另一个导入 HelloWorldAppModule 的模块 UsesHelloWorldModule,因此,据我所知,我可以在 HelloWorldAppModule 中注册的指令模板中使用它导出的组件。所以这里是:

@Component({
    selector: 'uses-hello-world',
    template: `<hello-world></hello-world><private></private>`
})
class UsesHelloWorldComponent {
}

@NgModule({
    imports: [HelloWorldAppModule],
    declarations: [UsesHelloWorldComponent],
})
class UsesHelloWorldModule {
}

但是,我还使用了未导出的 HelloWorldAppModule 中的 <private> 组件。那么会发生什么? angular 在解析 <private></private> 标签时会抛出错误,我说得对吗?

编辑:

另外,在UsesHelloWorldComponent里面使用only会怎么样:

@Component({
    selector: 'uses-hello-world',
    template: `<hello-world></hello-world>`
})
class UsesHelloWorldComponent {
}

请注意,它在其模板中使用了 <private>

感谢任何评论,因为网络上没有太多私有组件的示例。

<private></private> 应该会导致有关缺少 CUSTOM_ELEMENTS_SCHEMA 的错误。如果您证明 CUSTOM_ELEMENTS_SCHEMA 能够使用不是 Angular 组件的自定义标签,那么您将不会收到错误,除非您还添加了 <private [prop]="value"> 之类的绑定 - 这将导致错误,因为 <private> 没有 prop 属性 而不是 PrivateComponent