AngularJS检查指令中是否存在函数

AngularJS check if function exists in directive

本文关键字:存在 函数 是否 检查 指令 AngularJS      更新时间:2023-09-26

我有一个范围如下的指令:

scope: {
  copyObject: '&',
  deleteObject: '&'
}

现在,我的模板中有一个相应的按钮,看起来像这样:

 <button ng-click="copyObject()">Copy</button>

但是,如果没有应用于copy-object的功能,我想隐藏按钮,例如:

<!-- Should show the copy button -->
<my-directive copy-object="copyObject()"></my-directive>
<!-- Should not show the copy button -->
<my-directive></my-directive>

因此,我将以下内容应用于我的模板:

<button ng-click="copyObject()" ng-if="copyObject">Copy</button>

但这似乎不起作用,如果我检查指令真正的隔离范围,我会注意到,即使没有输入属性,函数仍然存在,所以按钮总是可见的。

是否可以检测函数是否绑定到copyObject()?这样做是个好做法吗?我不确定指令是否应该知道绑定函数,或者这是某种范围访问冲突?

例如:http://jsfiddle.net/azchpo5q/(第二个按钮应该不可见,因为它没有绑定任何操作)。

您可以使用ng-if中的函数来确定是否定义了该函数。

<button ng-click="copyObject()" ng-if="doShowCopy()">Copy</button>

然后定义这个方法:

 $scope.doShowCopy = function() {
     return (typeof $scope.copyObject == 'function');
 }