首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该调用父指令控制器还是创建服务?

我应该调用父指令控制器还是创建服务?
EN

Stack Overflow用户
提问于 2015-09-17 12:15:35
回答 2查看 116关注 0票数 1

假设有一个“对话”指令,由“消息”指令构成。消息指令有一个按钮来删除它。会话控制器具有从其列表中删除消息的方法。

在角文档中,他们说我们可以使用"require“从指令控制器访问父控制器。

这里,答案也建议使用require,并且只有当您不能使用require时才创建服务,因为这两个指令不相关。

从另一个控制器调用控制器不是一种糟糕的做法吗?我认为服务通常用于控制器之间的信息共享。

您不认为用deleteMessage方法创建服务并将该服务注入消息控制器更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-17 13:28:56

我个人不喜欢在父函数或根函数或类似的东西上调用函数,因为它是以一种隐式方式耦合的。我更喜欢像您提到的那样使用服务或将具体的函数注入到您的指令中。

下面是两种方法的优缺点。请注意,它们是基于我的个人经验(我不是专家)。

服务

服务是单例,这意味着整个应用程序中只有一个实例。如果需要的话,这可以有几个优点:

  • 它总是存在的(不需要显式地创建它)
  • 它可以缓存有用的数据,例如维护视图/页面的状态。
  • 它可用于不同组件之间的数据交换。
  • 它很容易被注射到任何你需要的地方。

不过,这也可能导致一些不利因素:

  • 如果不同的组件共享相同的服务,它们可能会破坏彼此的数据。
  • 组件(即指令)将取决于该服务,从而使指令的用户无法灵活地使用该指令(例如,当用户单击按钮时应该发生什么)。这意味着具体的功能基本上是在指令中“硬编码”的。

我个人喜欢使用服务,如果它们有指向指令的直接链接(而没有其他东西),或者不存储任何状态,例如,如果它们只包含简单的助手函数。

如果您的应用程序中有一个会话列表,那么我将考虑在一个公开诸如addMessagedeleteMessagesortBy等功能的服务中实现它。然后,它可以注入到任何需要访问(中央)列表的组件中。

将函数作为参数传递

另一方面,如果您有一个message-directive,您可能也希望将它用于其他类型的消息。这不是来自conversation的消息,而是来自mailbox的消息(只是一个愚蠢的例子;)。那我就不会把服务和指令结合起来了。您可以注入deleteMessage-function,在一种情况下可以从conversation中删除它,而在另一种情况下则从mailbox中删除它。

我认为这两种方法都是有效的,但始终取决于场景以及组件在应用程序中的共享/重用方式。

第二种方法可能从“耦合”-perspective中得到更好的选择,但是在有大量参数的情况下,以及在通过几个组件级别传递参数(例如,子-子-子指令)时,可能会变得复杂。

第一种方法易于实现,可以有几个优点,但会导致组件直接耦合到该服务,从而降低其可重用性。

票数 1
EN

Stack Overflow用户

发布于 2015-09-18 12:58:34

您真的需要在message指令中放置删除按钮吗?

由于delete按钮是为了抑制来自conversation控制器列表的消息,所以我宁愿将该按钮放在conversation视图中。

尽管如此,如果您确实希望在message指令中使用delete按钮,我只需将delete方法作为参数传递到您的指令中即可。在这样做时,您不必担心哪个控制器定义了函数,只需从您的子指令调用它(如果您希望父控制器执行它,只需将一个绑定的函数传递给您的指令)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32630101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档