我有一个有角度的站点,其中包含另一个组件内的一个组件。我正在使用路由和延迟加载外部组件(ComponentA)。内部组件 (ComponentB) 取决于第 3 方指令。
这是概念证明 https://plnkr.co/edit/7maVz2vO9LKTli47hyWl?p=info(打开控制台查看错误)。
在 ComponentB 中使用第 3 方指令时出现错误。这不是指令本身的错误,而是我构建代码的错误。
<tree-root [nodes]="nodes"></tree-root>
无法绑定到“节点”,因为它不是“树根”的已知属性
我可以通过在 ComponentA 中导入第 3 方模块来解决这个问题,但由于 ComponentA 不依赖于这个模块,所以这样做感觉是错误的。
我创建的 Plunker 是我的应用程序的一小部分,旨在隔离问题。它是为了演示一个概念,而不是作为一个应用程序有意义。我想要实现的是创建一个可以添加到我的任何页面的组件。该组件可以是一个小部件或其他东西,添加到一个或多个父页面。它是独立的。
我对 Angular 的有限知识从这里开始显现出来。由于组件应该允许我们进行基于组件的开发,将应用程序分成更小的部分,所以我不明白为什么 ComponentA 需要知道 ComponentB 具有哪些依赖项才能在其视图中使用它。
我还将证明这只是一个问题,因为我在 ComponentB 中包含了第 3 方指令。如果我删除该指令,一切正常。例如,如果我做了这样的事情:
<ul>
<li *ngFor="let node of nodes">
{{ node.name }}
</li>
</ul>
该应用程序运行良好,没有错误。
我做错了什么以及我应该采取哪些不同的做法?如果解决方案是向 ComponentA 添加导入,我会接受作为提供良好解释的答案(例如为什么*ngFor
有效,但是tree-root
指令没有)。