我想知道是否有一个angularjs绑定kendo自定义事件的最佳做法。
我有一个带有列菜单的网格,可以隐藏或显示列。
每当您选中/取消选中隐藏/显示列时,都会触发kendo columnHide 或 columnShow 事件。
在我的指令中,我有以下代码来捕获该事件。我想知道这是否是绑定这些事件的最佳方式,以及是否存在任何潜在的内存问题(例如,是否有必要解除这些事件的绑定):
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');
});
}
]);
答案 0 :(得分:1)
假设在删除网格时,kendo网格代码会删除您的侦听器,那么您应该没问题。如果kendo网格本身没有清理,你可以执行以下操作:
scope.$on('$destroy', function() {
kendoGrid.destroyOrWhateverItsCalled();
});
当您从视图中删除指令时,Angular会触发$ destroy事件。
答案 1 :(得分:1)
从我已经完成的(在此处和其他网站上)进行的研究来判断,似乎没有标准的,建议的angularjs特定绑定自定义kendo事件的方式(以及一般的自定义事件)。我在使用jQuery的bind()的问题上面完成它的方式是stackoverflow上的其他人已经完成它的方式,所以我坚持使用它。
作为参考,此处提出了类似的问题:
Event Bindings The AngularJS Way? ('我不认为目前有一种AngularJS方式可以进行这种事件绑定。据我所知,为所有丢失的事件添加本机支持是正在进行的事情,但它尚未在任何稳定版本中发布。 ')[通过缺少事件,他指的是尚未定制指令的事件,例如ng-click,ng-blur ]
Bind events on AngularJS element directives using jQuery
AngularJS: How to listen to DOM Events?
This dude也有一些信息,但他使用jQuery on()而不是bind(),基本上是相同的东西但on()更多 最新的(见 - Best practice using BIND or ON functions in jQuery): element.on( “myEvent”,...)
正如旁注所示,对于创建自己定义并发出(或广播)然后使用回调处理的自定义事件,您可以使用$ on()。有关示例,请参阅此excellent article。