2014-09-12 61 views
2

我在我的項目中使用angular-ui,我想實現一個模式窗口。庫(http://angular-ui.github.io/bootstrap/)的大多數組件都按照指令實現(如預期的那樣)。但是,模式不是 - 它是作爲服務實現的。這導致了對控制器中視圖的強烈依賴(即,控制器需要知道視圖使用模態窗口,但情況不應該如此)。AngularUI:爲什麼模態沒有作爲指令實現?

我的問題是:爲什麼模態實現爲服務,而不是指令?它有什麼好處?

+0

如果你不想在每個控制器中注入'$ modal',有很多方法可以解決它。創建自己的指令來監聽廣播事件,或者在你已經使用的服務中注入'$ modal'作爲示例 – charlietfl 2014-09-12 20:01:34

+0

@harlietfl問題是:它作爲服務公開的原因是什麼?我看不到任何指令的好處,並且我看到很多缺點(依賴於控制器中的視圖)。我知道我可以自己寫一條指令,但也許這是服務的原因。 – jfu 2014-09-12 20:16:41

回答

1

$modal指令是相當靈活,並通過其API,它支持:

  • 正在對你想要的任何事件觸發,因爲控制器控制打開時。
  • 使用resolve選件
  • 在對話框中使用任何控制器或模板將數據從控制器傳遞到對話框中的控制器。
  • 將數據從接近觸發控制器的對話框傳回,通過其result承諾。

雖然這不是不可能完全在一個指令中,但我認爲它只能通過使用很多選項或複雜的對象來實現,而這些對象必須在控制器中構建。

這不是一個指令的另一個原因是,指令通常是針對頁面中特定位置的東西。模式的設計不會附加到頁面中的任何元素。

我會建議試圖設計一個指令的API,使其具有與$modal相同的功能,並且我懷疑它會揭示使用服務總體上更清晰並且可能更靈活。

相關問題