这是以下问题的扩展
How do you check if & variable is set in directive
是否可以检查指令HTML中的表达式中是否已设置变量?
<button class="btn btn-primary navbar-btn" ng-click="callback()"
ng-show="isFunction(callback)"></button>
在上面的示例中,ng-show
评估为null
,因为angular.isFunction
并不存在于表达式中。
我尝试在范围上定义一个局部函数但总是返回true,因为 回调始终定义为函数:
$scope.callback():function (locals) {
return parentGet(scope, locals);
}
答案 0 :(得分:0)
我意识到OP现在可能已经找到了答案,但我今天遇到了同样的问题,这是唯一一个关注此问题的问题。
最简单的解决方案是检查是否在元素上定义了属性:
angular.isDefined(attrs['anAttribute'])
这只检查属性的存在,而不评估表达式。
问题是angular会使用getter包装&
函数(结果代码在原始问题中),这会阻止我们使用angular.isFunction
或angular.isDefined
。这就是它的作用(角度1.3.14):
[...]
case '&':
parentGet = $parse(attrs[attrName]);
isolateBindingContext[scopeName] = function(locals) {
return parentGet(scope, locals);
};
break;
但是,如果我们以这种方式传递回调:
<button class="btn btn-primary navbar-btn" ng-click="callback"
ng-show="isFunction(callback)"></button>
然后,在指令链接功能中我们可以做到:
scope.callback = scope.callback();
angular.isDefined(scope.callback) // actually works as expected
这种方法的缺点是我们失去了指令api的一些声明性。