Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS检查指令中是否存在函数_Javascript_Angularjs - Fatal编程技术网

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

Javascript AngularJS检查指令中是否存在函数,javascript,angularjs,Javascript,Angularjs,我有一个涉及以下范围的指令: 范围:{ copyObject:“&”, deleteObject:“&” } 现在,我的模板中有一个对应的按钮,如下所示: 复制 但是,如果没有应用于复制对象的功能,我想隐藏该按钮,例如: <!-- Should show the copy button --> <my-directive copy-object="copyObject()"></my-directive> <!-- Should not show

我有一个涉及以下范围的指令:

范围:{
copyObject:“&”,
deleteObject:“&”
}
现在,我的模板中有一个对应的按钮,如下所示:

复制
但是,如果没有应用于
复制对象的功能,我想隐藏该按钮,例如:

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

<!-- Should not show the copy button -->
<my-directive></my-directive>

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

复制
但这似乎不起作用,如果我检查指令的实际隔离范围,我会注意到,即使没有输入属性,函数仍然存在,因此按钮始终可见

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


例如:(第二个按钮不应可见,因为它没有绑定任何操作)。

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

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

点击不是问题(括号中已经有了),但是如果没有绑定任何函数,我想隐藏按钮。我添加了一个提琴:第二个按钮不应该可见,因为它没有
复制对象
属性。我找到了答案:(我还投票以复制方式关闭)Thx g00glen00b,你的答案解决了我的问题!问题是,
typeof$scope.copyObject
始终是一个函数,因为这是一个包装函数,而不是来自外部作用域的直接函数。确定吗?我猜它可能是在范围内定义的,但不是一个函数!!它被定义为一个函数是,如果我使用
指令.isolateScope().copyObject
它将返回一个函数。不过多亏了另一个问题,我通过使用
link()
函数中的
attrs
解决了这个问题。我把它标为复制品,绝对肯定。此函数基本上尝试在父作用域中计算函数。@Prasad它假定为,因为函数被绑定为
&
。所以AngularJS知道它应该是一个函数,并且它返回一个包装器,就像前面提到的@dfsq一样。你可以在这把小提琴上看到:
 $scope.doShowCopy = function() {
     return (typeof $scope.copyObject == 'function');
 }