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');
}