知道AngularJS指令方法绑定是否默认为angular.noop

时间:2014-05-15 08:56:06

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个将函数传递给插件的简单指令;然后,插件将使用具有给定值的函数。为简单起见,我们忽略对数据的更改:

angular.module('some.directives', [])
  .directive('myDirective', [,
    function () {
      return {
        restrict: 'EAC',
        scope: {
          value: '@', // some value
          fun: '&' // the function
        },
        link: function(scope, element, attrs) {
          ThePlugin.thisIsTheVal(scope.value);
          ThePlugin.thisIsTheFun(scope.fun);
        }
      };
    }
  ]);

问题是:当未定义fun属性或父作用域没有指定的函数时,ThePlugin将始终执行angular.noop,因为这似乎是AngularJS提供的默认值。

由于我需要在未定义函数时传递实数undefined,我怎么知道调用范围是否实际具有该函数?

解决方法可能包括针对目标值测试函数,如果结果值为undefined,则返回undefined

ThePlugin.thisIsTheFun(function() {
  if (scope.fun(scope.value) === undefined) {
    return scope.fun;
  }
  return undefined;
});

这可能会导致一些不一致,因为可能会允许fun函数在将来返回undefined作为正确的结果。

1 个答案:

答案 0 :(得分:1)

检查fun属性是否已定义:

if (!attrs.hasOwnProperty('fun')) {
   scope.fun = undefined;
}