【问题标题】:AngularUI: why modal is not implemented as a directive?AngularUI:为什么模式没有作为指令实现?
【发布时间】:2014-09-12 18:56:37
【问题描述】:

我在我的项目中使用 angular-ui,我想实现一个模态窗口。库的大部分组件 (http://angular-ui.github.io/bootstrap/) 都作为指令实现(如预期的那样)。但是,模式不是 - 它是作为服务实现的。这导致对控制器中的视图有很强的依赖性(即控制器需要知道视图使用的是模态窗口,这是不应该的)。

我的问题是:为什么模式是作为服务实现的,而不是指令?它有什么好处吗?

【问题讨论】:

  • 如果你不想在每个控制器中注入$modal,有很多方法可以解决它。创建自己的指令来侦听广播事件或将$modal 注入您已经用作示例的服务中
  • @harlietfl 问题是:它作为服务公开的原因是什么?我看不出这比指令有什么好处,而且我确实看到了很多缺点(依赖于控制器中的视图)。我知道我可以自己编写指令,但也许它是服务是有原因的。

标签: angularjs angular-ui-bootstrap


【解决方案1】:

$modal 指令非常灵活,通过其 API,它支持:

  • 在您想要的任何事件上触发,因为控制器控制何时打开。
  • 使用resolve 选项将数据从控制器传递到对话框中的控制器
  • 在对话框中使用任何控制器或模板。
  • 通过其result 承诺,在靠近触发控制器的对话框中传回数据。

虽然这并非不可能全部包含在指令中,但我认为它只能通过使用大量选项或复杂对象来实现,无论如何都必须在控制器中构建。

这不是指令的另一个原因是指令通常用于页面中特定位置的事物。就其设计而言,模态框并未附加到页面中的任何元素。

我建议尝试为提供与$modal 相同功能的指令设计一个 API,我怀疑它会表明使用服务总体上更清晰,可能更灵活。

【讨论】:

    猜你喜欢
    • 2017-01-22
    • 2015-02-24
    • 2012-04-29
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多