创建并销毁Angular观察者

时间:2015-10-02 20:02:07

标签: angularjs

我想关闭这个观察者,因为它一直打击" kendoWidgetCreated"事件一遍又一遍,并导致无限循环,我点击kendoGrid.refresh()

如何将其关闭,然后重新开启?



scope.$on("kendoWidgetCreated", function (ev, widget) {

  var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid");
  if (kendoGrid != undefined) {
      kendoGrid.$angular_scope.compileTemplate();
      kendoGrid.refresh();
  }

});      




我尝试过这样的事情,但无法让观察者触发:

  var kendoWidgetWatcher = scope.$watch("kendoWidgetCreated", refreshKendoWidgets);

  var refreshKendoWidgets = function (ev, widget) {

           // widget compile/refresh code here...
  }

建议总是受到赞赏......

的问候, 鲍勃

*****更新**** 我最初创建匿名函数的想法不起作用;但是,Pankar的答案对我有用。 这是更新的工作版本:



// setup new 'kendoWidgetWatcher' object for Kendo widget watcher, compile/refresh Kendo grids/charts
var kendoWidgetWatcher;
function registerWatcher() {
  kendoWidgetWatcher = scope.$on("kendoWidgetCreated", refreshKendoWidgets);
}              

function refreshKendoWidgets(ev, widget) {

  var ht = widget.getSize().height;
  var wt = widget.getSize().width;
  
  var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid");
  if (kendoGrid != undefined) {
      if (kendoWidgetWatcher) {
	  kendoWidgetWatcher();     // disable watch
      }
      kendoGrid.$angular_scope.compileTemplate();  // recompile the html tempate, then refresh kendo widget
      kendoGrid.refresh();
      registerWatcher();    //  re-enable
  }
}




1 个答案:

答案 0 :(得分:1)

您可以通过将观察者参考作为功能调用来轻松关闭观察者,并在需要时重新注册。

var kendoWidgetWatcher;



function refreshKendoWidgets(ev, widget) {
 
  var kendoGrid = widget.element.parent().find('.k-grid').data("kendoGrid");
  if (kendoGrid != undefined) {
    kendoGrid.$angular_scope.compileTemplate();
    kendoGrid.refresh();        
    // HOW TO DISABLE THE WATCH HERE ?
  }
}




function registerWatcher (){
    kendoWidgetWatcher = scope.$watch("kendoWidgetCreated", refreshKendoWidgets);
}
registerWatcher();

//you could call below code for re-registering the watcher
if(kendoWidgetWatcher)
  kendoWidgetWatcher(); //to deregister it.
registerWatcher(); //re-register it.