0

我想知道是否有绑定剑道自定义事件的 angularjs 最佳实践。

我有一个带有列菜单的网格,可让您隐藏或显示列。

列菜单打开的网格

每当您选中/取消选中隐藏/显示列时,都会触发kendo columnHidecolumnShow事件。

在我的指令中,我有以下代码来捕获该事件。我想知道这是否是绑定这些事件的最佳方式以及是否存在任何潜在的内存问题(例如是否有必要取消绑定这些事件):

angular.module('sgComponents').directive('sgGrid', [

   link: function (scope, elm, attrs, ctrls) {

      kendoGrid = elm.data('kendoGrid'); // the grid

      kendoGrid.bind('columnHide', function () { 
         console.log('HIDE COLUMN');
      });

      kendoGrid.bind('columnShow', function () {
         console.log('SHOW COLUMN');
      });
   }
]);
4

2 回答 2

1

从我所做的(诚然不多!)研究来看,在这里和其他网站上,似乎没有标准的、推荐的 angularjs 方式来绑定自定义剑道事件(以及一般的自定义事件)。我在上面的问题中使用 jQuery 的 bind() 完成的方式是 stackoverflow 上的其他人已经完成的方式,所以我坚持这样做。

作为参考,这里提出了类似的问题:

事件绑定 AngularJS 方式? ('我认为目前没有 AngularJS 方法来进行这种事件绑定。据我所知,为所有缺失的事件添加本地支持正在进行中,但它还没有在任何稳定版本中发布。 ') [通过缺少事件,他指的是尚未自定义指令的事件,例如 ng-click、ng-blur ]

使用 jQuery 在 AngularJS 元素指令上绑定事件

AngularJS:如何监听 DOM 事件?

这个家伙也有一些信息,但他使用 jQuery on() 而不是 bind(),本质上是一样的,但 on() 是最新的(请参阅 -在 jQuery 中使用 BIND 或 ON 函数的最佳实践): element.on( “我的事件”,...)

顺便说一句,要创建您自己定义并发出(或广播)然后使用回调处理的自定义事件,您可以使用 $on()。有关示例,请参阅这篇出色的文章。

于 2014-03-18T13:40:37.013 回答
1

假设删除网格时剑道网格代码会删除您的听众,您应该没问题。如果剑道网格没有自行清理,您可以执行以下操作:

scope.$on('$destroy', function() {
  kendoGrid.destroyOrWhateverItsCalled();
});

当你的指令从视图中移除时,Angular 会触发 $destroy 事件。

于 2014-03-13T10:01:00.067 回答