发布于 2015-09-17 13:28:56
我个人不喜欢在父函数或根函数或类似的东西上调用函数,因为它是以一种隐式方式耦合的。我更喜欢像您提到的那样使用服务或将具体的函数注入到您的指令中。
下面是两种方法的优缺点。请注意,它们是基于我的个人经验(我不是专家)。
服务
服务是单例,这意味着整个应用程序中只有一个实例。如果需要的话,这可以有几个优点:
不过,这也可能导致一些不利因素:
我个人喜欢使用服务,如果它们有指向指令的直接链接(而没有其他东西),或者不存储任何状态,例如,如果它们只包含简单的助手函数。
如果您的应用程序中有一个会话列表,那么我将考虑在一个公开诸如addMessage、deleteMessage、sortBy等功能的服务中实现它。然后,它可以注入到任何需要访问(中央)列表的组件中。
将函数作为参数传递
另一方面,如果您有一个message-directive,您可能也希望将它用于其他类型的消息。这不是来自conversation的消息,而是来自mailbox的消息(只是一个愚蠢的例子;)。那我就不会把服务和指令结合起来了。您可以注入deleteMessage-function,在一种情况下可以从conversation中删除它,而在另一种情况下则从mailbox中删除它。
我认为这两种方法都是有效的,但始终取决于场景以及组件在应用程序中的共享/重用方式。
第二种方法可能从“耦合”-perspective中得到更好的选择,但是在有大量参数的情况下,以及在通过几个组件级别传递参数(例如,子-子-子指令)时,可能会变得复杂。
第一种方法易于实现,可以有几个优点,但会导致组件直接耦合到该服务,从而降低其可重用性。
发布于 2015-09-18 12:58:34
您真的需要在message指令中放置删除按钮吗?
由于delete按钮是为了抑制来自conversation控制器列表的消息,所以我宁愿将该按钮放在conversation视图中。
尽管如此,如果您确实希望在message指令中使用delete按钮,我只需将delete方法作为参数传递到您的指令中即可。在这样做时,您不必担心哪个控制器定义了函数,只需从您的子指令调用它(如果您希望父控制器执行它,只需将一个绑定的函数传递给您的指令)。
https://stackoverflow.com/questions/32630101
复制相似问题