我正在创建一个网格小部件的复杂指令,我不确定我应该在哪里公开网格指令API ,即它的属性(例如selectedItems
)和方法(例如scrollRowIntoView(rowIndex)
)。
我正在考虑的选项是:
ngFormDirective
)。 我想知道的是:
谢谢!
答案 0 :(得分:0)
通常,您希望将绑定公开为指令中的属性。也就是说,如果我想将数组someItems
绑定到您的网格,我希望您的指令看起来像这样:<my-grid my-items="someItems">
。
您可以将钩子作为属性公开,例如“调整网格大小时运行此函数”。如果我的作用域上有whenGridResized
函数,我也想将其设置为属性,如下所示:<my-grid onresize="whenGridResized()">
。
在其他情况下,您无法真正使用属性,例如scrollRowIntoView()
示例。这将是在指令控制器中公开的一个很好的候选者,因为这是指令用户在系统中发生其他事情时可能想要调用的东西(例如DOM事件)。
因此,您应该将API公开为网格内发生的事件(您控制的事物)的属性,例如onresize
和ondelete
或其他。你当然可以在控制器中公开它们。
当你的指令需要对诸如scrollRowIntoView()
之类的外部事件做出反应时,你会在指令控制器中公开它,因为将这些钩子作为属性暴露是一个笨重的API。
您不应该通过作用域公开API,因为您需要为网格隔离作用域。通过范围公开它意味着您必须将其设置为范围父级,并且直接访问父级范围几乎不是一个好主意。
<强> TL; DR 强>
根据经验,当属性没有意义时,您可以尽可能多地公开指令控制器上的属性和方法。在属性和控制器中公开相同的功能是一个好主意,因为很难预测用户将如何使用您的指令。