AngularJS 指令 - 指定回调的默认值

AngularJS Directives - specify defaults for callbacks

我有一个指令将一些方法作为回调。所有这些都需要属性才能工作。

scope: {
    onEventOne: '&?',
    onEventTwo: '&?'
}

function someWork() {
    onEventOne()(myVar);
    onEventTwo()(myOtherVar);
}

我的问题是当我没有定义其中一些回调时,因为它们并非都是必需的。

<div>
    <myDirective on-event-one="customHandler"></myDirective>
</div>

在上面的代码中,当调用 onEventOne()(myVar); 时一切正常,但是当调用 onEventTwo()(myOtherVar); 时我得到 TypeError: undefined is not a function。 我尝试使用 link 函数将空白函数设置为默认值,

function linkFunction(scope, element, attrs) {
    if (!attrs.onEventOne) {scope.onEventOne = scope.blankHandler;}
    if (!attrs.onEventTwo) {scope.onEventTwo = scope.blankHandler;}
}

但这会导致调用默认函数,同时仍然抛出 TypeError: undefined is not a function

如何设置这些默认功能?

使用您的函数意味着 blankHandler 必须 return 多一个 "blank" 函数(angular.noop 在这里很方便)。在你的情况下,这就是我在 link 函数中要做的事情:

var blankHandler = function() {
    return angular.noop;
};

if (!attrs.onEventOne) {scope.onEventOne = blankHandler;}
if (!attrs.onEventTwo) {scope.onEventTwo = blankHandler;}

scope.onEventOne()(myVar);
scope.onEventTwo()(myOtherVar);