我有一个将函数传递给插件的简单指令;然后,插件将使用具有给定值的函数。为简单起见,我们忽略对数据的更改:
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
作为正确的结果。
答案 0 :(得分:1)
检查fun
属性是否已定义:
if (!attrs.hasOwnProperty('fun')) {
scope.fun = undefined;
}