AngularJS动态调用函数

时间:2015-06-22 11:27:48

标签: javascript angularjs

此时,我是AngularJS的新手。

这有效:

scope.$apply(
  scope.$eval(attrs.ngEnter, {'event': event})
);

但动态调用该函数不起作用:

<input type="text" ng-model="value" ng-enter="hideToolTip()" />

HTML:

   app.directive('ngEnter', function() {
            return function(scope, element, attrs) {
                console.log(scope.hideTooltip());
                element.bind("keydown keypress", function(event) {
                    if(event.which === 13) {
                        console.log(attrs.ngEnter);
                        scope.$apply(
                            scope.$eval(attrs.ngEnter, {'event': event})
                        );
                        event.preventDefault();
                    }
                });
            };
        });

enitre指令:

scope.$apply()

那么,如何在AngularJS指令中动态调用函数?

1 个答案:

答案 0 :(得分:2)

好像你错过了HTML

中控制器方法的参数
// you have missed the event parameter.

<input type="text" ng-model="value" ng-enter="hideToolTip(event)" />

app.directive('ngEnter', function() {
    return function(scope, element, attrs) {

      element.bind("keydown keypress", function(event) {
        if (event.which === 13) {

          console.log(attrs.ngEnter);
          scope.$apply(
            scope.$eval(attrs.ngEnter, {
              'event': event
            })
          );
          event.preventDefault();
        }
      });
    };
  });
控制器中的

 $scope.hideToolTip = function(event) {
    console.log(event);
  }

这是DEMO

P.S。这将在点击 ENTER 后调用控制器功能两次,因为您绑定了keydownkeypress个事件。

并且不要忘记删除 console.log(scope.hideTooltip());行。