2013-03-07 38 views
2

我創建一個網格小部件的複雜的指令,我不知道我應該在哪裏揭露電網指令API,也就是說,它的性質(如selectedItems)和方法(如scrollRowIntoView(rowIndex) )。如何公開一個widget指令API

我正在考慮的選項包括:

  1. 揭露API的範圍(我的指令定義一個孤立的 範圍)。
  2. 暴露出指令的控制器的API(如果我 正確理解這是什麼在 ngFormDirective完成)。
  3. 在範圍上公開一個網格對象,其中 將公開該API。
  4. 某種混合之間 選項(例如屬性暴露的範圍,在控制器 方法)。

我想知道的是:

  • 是否有這個用例最佳實踐
  • 什麼是利弊爲每個替代?
  • 是否有其他有效的替代方案?

謝謝!

回答

0

通常,您想要將綁定公開爲指令上的屬性。也就是說,如果我想將我的數組someItems綁定到您的網格,我希望您的指令看起來像這樣:<my-grid my-items="someItems">

您也可以將鉤子暴露爲屬性,例如「當網格調整大小時運行此函數」。如果我在我的示波器上有whenGridResized函數,我想將它設置爲屬性,如下所示:<my-grid onresize="whenGridResized()">

在其他情況下,您無法真正使用屬性,例如scrollRowIntoView()示例。這是在指令控制器中公開的好選擇,因爲這是指令用戶在系統中發生其他事情時可能需要調用的東西(如DOM事件)。

所以你應該公開你的API作爲事件發生在你的網格內(你控制的東西)的屬性,如onresizeondelete或其他。您當然也可以將它們暴露在控制器中。

當您的指令需要對外部事件如scrollRowIntoView()作出反應時,您應該在指令控制器中公開該指令,因爲它將暴露此類掛鉤爲屬性的笨重API。

你不應該通過範圍公開你的API,因爲你想爲你的網格隔離範圍。通過範圍公開它將意味着您必須將它設置爲範圍父級,並且直接訪問父範圍幾乎不是一個好主意。

TL; DR

的經驗法則是,以公開爲多,你可以爲屬性和方法,您的指令控制器上,當屬性沒有意義。在屬性和控制器中公開相同的功能是一個好主意,因爲很難預測用戶如何使用您的指令。

相關問題