请在这一点上帮助我。
我有一个角度为1.5的组件使用'&结合':
app.component('foo', {
bindings: {
message: '<'
onSomething: '&'
},
template:'<div>blah blah</div>',
controller: function () {
var ctrl = this;
ctrl.myOperation = function () {
ctrl.onSomething(); // <= look this!
}
}
});
我想测一下是否有关于某事的内容&#39;是定义。
事实上,如果我以这种方式使用它:
<foo message='my message' on-something='doSomething()'></foo>
一切都好。
但如果我以这种方式使用它:
<foo message='my message'></foo>
&#39; onSomething&#39;不应该定义,但我无法检查它!
我试过了:
if (ctrl.onSomething) ...
if (ctrl.onSomething == undefined) ...
if (ctrl.onSomething == null) ...
if (angular.isDefined(ctrl.onSomething)
所有这些测试总是返回&#39; true&#39;,即使回调尚未通过。
答案 0 :(得分:3)
它们返回true
因为ctrl.onSomething
是一个钩子函数,用于启动在组件实例中声明的回调。它总是 truthy 。相反,尝试将$attrs
注入控制器并对其进行无效检查。
function( $attrs ){
var ctrl = this;
ctrl.myOperation = function(){
if( $attrs.onSomething ){ .... }
}
}