我有2种不同类型的组件。它们都只使用和包含HTML5-canvas元素,但需要在图表上显示不同类型的数据:
两个组件都需要来自两个数据集的第一个数据条目的dateTime,但最后一个条目的dateTime来自它们各自的数据集。
组件A 需要组件B的第一个输入日期。
目前我这样做:
组件B具有从其自己的数据集中查找日期限制的方法。使用观察者模式&主题,我通过服务和组件A广播返回的日期。
但问题在于,耦合突然变得非常紧张。我不能首先初始化组件A,因为它需要B先进行计算。理想情况下,这两个组件应同时初始化和显示/共享其数据,并继续这样做。 (例如,如果用户在一个图表中滚动,它也应滚动所有其他组件,依此类推。)
这就是我想在这些组件上添加额外图层的原因。如果你愿意,你可以使用控制器。
我无法弄清楚什么是最好的:
另一个组件组件C , A& B 是孩子的?
由于我还是Angular 2的新手,很难说哪种方法最适合未来的维护/开发?
我正在努力创建另一个普通组件作为父组件,并让该组件根据需要向其子组件(A& B)发送和接收数据。
我也不确定什么是“最佳实践”,如果你可以使用像空的“逻辑shell”这样的组件。我已经尝试过这里和那里的阅读,我发现了很多,但我似乎无法得到我的问题的确切答案。我需要时间才能理解所有这些知识并自己回答,所以我希望有人能给我一个帮助轻推,谢谢。
PS:我应该补充一点,我的角应用程序将是更大应用程序中的子组件,并将从其他一些父组件中获取其数据。
答案 0 :(得分:0)
为什么不把你的逻辑放入服务? 您还可以通过将子服务注入父服务来设置服务层次结构。
如果您的逻辑与UI /交互无关,则应将其置于可重用服务中。如果您的逻辑与UI相关,您可以设置一个父组件充当A和B之间的中介(根据它们各自的输入/输出参数)
无论你做什么,最好将问题分开。
A和B都不需要关心需要输出的其他组件。 Angular具有输入/输出参数。
不要将一些通用日期时间计算内容放入组件中。通过服务使其可重复使用。
通过引入接口和注射来保持耦合松散。
更新
服务应该只使用可注入的构造函数参数,因此您应该使用方法(或设置器,但不那么富有表现力)传递输入。 要传递任意JSON对象,您可以使用任何参数。但是,如果你的json遵循某种结构,你可以定义一个接口。
public doStuff(input: any): any { }
或
interface IMyDataContract {
dateField: string;
}
public doStuff(input: IMyDataContract): any { }