背景应用逻辑的最佳解决方案?

时间:2017-09-15 11:00:54

标签: html5 angular angular-components

我有2种不同类型的组件。它们都只使用和包含HTML5-canvas元素,但需要在图表上显示不同类型的数据:

  1. 组件A(只有其中一个)
  2. 组分B(这些中的0至4)
  3. 两个组件都需要来自两个数据集的第一个数据条目的dateTime,但最后一个条目的dateTime来自它们各自的数据集。

    组件A 需要组件B的第一个输入日期。

    目前我这样做:

    组件B具有从其自己的数据集中查找日期限制的方法。使用观察者模式&主题,我通过服务和组件A广播返回的日期。

    但问题在于,耦合突然变得非常紧张。我不能首先初始化组件A,因为它需要B先进行计算。理想情况下,这两个组件应同时初始化和显示/共享其数据,并继续这样做。 (例如,如果用户在一个图表中滚动,它也应滚动所有其他组件,依此类推。)

    这就是我想在这些组件上添加额外图层的原因。如果你愿意,你可以使用控制器。

    我无法弄清楚什么是最好的:

    • 可以将外部数据作为输入的共享服务吗?
    • 容器组件? (包含)
    • 另一个组件组件C A& B 是孩子的?

    • 由于我还是Angular 2的新手,很难说哪种方法最适合未来的维护/开发?

    我正在努力创建另一个普通组件作为父组件,并让该组件根据需要向其子组件(A& B)发送和接收数据。

    我也不确定什么是“最佳实践”,如果你可以使用像空的“逻辑shell”这样的组件。我已经尝试过这里和那里的阅读,我发现了很多,但我似乎无法得到我的问题的确切答案。我需要时间才能理解所有这些知识并自己回答,所以我希望有人能给我一个帮助轻推,谢谢。

    PS:我应该补充一点,我的角应用程序将是更大应用程序中的子组件,并将从其他一些父组件中获取其数据。

1 个答案:

答案 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 { }