带命名函数的角度事件处理程序

时间:2016-06-29 23:10:39

标签: javascript jquery angularjs

我有一个事件处理程序附加到具有ng-change属性的input元素。当我为处理程序分配一个未命名的函数时,单击按钮会起作用。当我为处理程序分配命名函数时,浏览器将尝试在加载时解析命名函数中的所有参数。似乎必须使用未命名的函数声明javascript事件处理程序。这两者有什么区别?感谢。



//this doesn't fire the event handler
//vm.facilityChanged = facilityChanged(vm, fsrFactory);

//this works
vm.facilityChanged = function() {
  vm.postStatus = undefined;
  vm.services = undefined;
  vm.roles = undefined;
  vm.services = fsrFactory.service().query({
      FacilityID: vm.facility
    })
    .$promise.then(
      function(data) {
        vm.services = data;
      });
}

function facilityChanged(vm, fsrFactory) {
  vm.postStatus = undefined;
  vm.services = undefined;
  vm.roles = undefined;
  vm.services = fsrFactory.service().query({
      FacilityID: vm.facility
    })
    .$promise.then(
      function(data) {
        vm.services = data;
      });
}




1 个答案:

答案 0 :(得分:0)

vm.facilityChanged = function() {
    ...
}

这使vm.facilityChanged成为对匿名函数的引用。

vm.facilityChanged = facilityChanged(vm, fsrFactory);

但是,此使用变量facilityChangedvm调用命名函数fsrFactory。您想要做的是引用使用vm.facilityChanged的命名函数,就像使用匿名函数一样。

vm.facilityChanged = facilityChanged;

function facilityChanged(vm, fsrFactory) {
    ...
}