2016-11-29 53 views
1

請幫助我在這一點上。角度1.5分量檢查'&綁定'爲空

我有使用「&結合」的角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! 
     } 
    } 
}); 

我想測試,如果「onSomething」定義。

事實上,如果我以這種方式使用它:

<foo message='my message' on-something='doSomething()'></foo> 

一切正常。

但如果我使用了這種方式:

<foo message='my message'></foo> 

「onSomething」不應該被定義,但我不能檢查它!

我想:

if (ctrl.onSomething) ... 
if (ctrl.onSomething == undefined) ... 
if (ctrl.onSomething == null) ... 
if (angular.isDefined(ctrl.onSomething) 

所有這些測試總是返回「真」,即使回調未獲通過。

+0

敢肯定你可以改變'「和」'爲'「?&」',然後你會看到'ctrl.onSomething === null' – abyx

回答

2

他們返回true,因爲ctrl.onSomething是一個鉤子函數,用於啓動組件實例中聲明的回調。它永遠是truthy。相反,請嘗試將$attrs注入您的控制器並對其進行無效檢查。

function($attrs){ 
    var ctrl = this; 
    ctrl.myOperation = function(){ 
     if($attrs.onSomething){ .... } 
    } 
} 
+1

當有人研究技術太快此發生:我不知道$ attr。謝謝! –

+1

之間有微妙的差異。一個指令和組件,主要是如何添加控制器以及何時添加。因爲組件中沒有鏈接功能,所以他們爲要注入的組件添加了$ element和$ attrs服務,以實現與指令鏈接功能中相同的功能。 – jusopi