【发布时间】:2017-09-17 06:51:21
【问题描述】:
我有一个 Angular 站点,其中包含另一个组件中的一个组件。我正在使用路由和延迟加载外部组件(ComponentA)。内部组件 (ComponentB) 依赖于第 3 方指令。
这是proof of concept(打开控制台查看错误)。
在 ComponentB 中使用 3rd 方指令时出现错误。这不是指令本身的错误,而是我的代码结构错误。
<tree-root [nodes]="nodes"></tree-root>
无法绑定到“节点”,因为它不是“树根”的已知属性
我可以通过在 ComponentA 中导入 3rd 方模块来解决这个问题,但是由于 ComponentA 不依赖这个模块,所以这样做感觉不对。
我创建的 Plunker 只是我的应用程序的一小部分,旨在隔离问题。这是为了展示一个概念,而不是作为一个应用程序有意义。我想要实现的是创建一个可以添加到我的任何页面的组件。这个组件可以是一个小部件或其他东西,添加到一个或多个父页面。它是独立的。
我在 Angular 方面的有限知识开始在这里展示。由于组件应该允许我们进行基于组件的开发,将我们的应用程序分成更小的部分,我不明白为什么 ComponentA 需要知道 ComponentB 有什么依赖关系才能在其视图中使用它。
我还将证明这只是一个问题,因为我在 ComponentB 中包含了第 3 方指令。如果我删除指令,一切正常。例如,如果我改为这样做:
<ul>
<li *ngFor="let node of nodes">
{{ node.name }}
</li>
</ul>
应用程序运行良好,没有错误。
我做错了什么,我应该做些什么不同的事情?如果解决方案是向 ComponentA 添加导入,我会接受作为答案,给出一个很好的解释(例如为什么 *ngFor 有效但 tree-root 指令无效)。
【问题讨论】:
-
定义组件的属性
-
您可以将第 3 方的模块添加到父模块中。然后你就会拥有它,不是吗?
-
是否有什么东西阻止你在功能 b 模块中导入第三方模块?
-
" ComponentA 不依赖于这个模块" --> 确实如此,moduleA 声明了componentB。实际上,您的整个代码结构非常奇怪。例如,为什么要在 ModuleA 和 ModuleB 中声明 ComponentB ?这没有意义。
-
感谢 cmets。我已经编辑了我的帖子以包含更多细节。
标签: angular typescript