【问题标题】:Architectural Flow of Angular 2 appAngular 2 应用程序的架构流程
【发布时间】:2016-05-04 05:20:28
【问题描述】:

我正在开发一个 Angular2 应用程序。我的应用程序用于创建新帖子或编辑已创建的帖子。它有两页。

第一页,只是一个包含所有基本信息的普通表单,第二页有多个组件,它们会相互通信,即每个组件以某种方式相互关联,并且需要相互通信。这些组件是动态的,取决于类型。

我的问题是:我应该如何构建应用程序的流程以使其适合创建和编辑场景。

我现在想到的方式是,

每个组件都有一个保存数据的服务(使它们可注入),我必须为所有这些服务创建观察者并订阅其他组件中的观察者,以便它们根据服务的变化采取行动。

其他方式是:

我创建了一个通用发射器服务,它将返回发射对象,我可以调用该组件并发射一个其他组件监听的事件。

哪种方式是处理这种情况的好方法,从长远来看有帮助?另外,是否应该提供帮助,以便我以后可以无缝添加更多组件?

谢谢

【问题讨论】:

    标签: architecture angular interaction angular2-services


    【解决方案1】:

    我会考虑在第二页的 ngOnInit 方法中创建您需要的“模型”对象,并将它们作为输入传递给需要它们的组件。

    这要求组件定义 @Input() 属性以接收此类“模型”对象。

    希望对你有帮助

    回应 ANUTEJA 的评论

    我会考虑以下策略:

    1) Child1 定义了一个输出属性(比如说@Output() resultOutput),通过它它表明已经从后端调用中检索到新结果,即类似于this.resultOutput.emit(resultOfBackendCall)(假设resultOfBackendCall 是一个检索数据的Child1方法中定义的变量)

    2) Parent 组件订阅Child1resultOutput 属性,因此可以通过<child1 (resultOutput)="newResult($event)"></child1> 之类的方式知道何时获取新结果

    3) ParentnewResult(event) 方法将从Child1 接收到的结果存储到Parent 的属性中(我们称之为变量resultReceived),类似于

    newResult(resultFromBackEnd) {
      this.resultReceived = resultFromBackEnd;
    }
    

    4) Child2 定义了一个输入属性(比如说@Input() myList),它希望从Parent 接收需要显示的列表

    5) Parent 通过 <child2 [myList]="resultReceived"></child2> 之类的方式使用属性 resultReceived 提供 Child2

    如果一切正常,一旦Parent 收到来自Child1 的关于后端调用的新结果的通知,它就会提供Child2 并且应该显示结果。

    基本上这意味着Parent 集中所有通知并根据应用程序规则将数据分派给其子级。这样,在我看来,您可以获得一个清晰的设计,Parent 协调在这个特定的应用程序中发生的事情。

    我希望这已经足够清楚并且对您有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 2016-04-24
      • 2016-07-29
      • 2018-07-04
      • 2011-04-09
      • 1970-01-01
      • 2017-03-01
      相关资源
      最近更新 更多