2015-09-26 64 views
1

在我的角度的應用程序,我有一個表格複選框上輸入:角複選框,輸入NG-點擊從來沒有所謂的

<div ng-repeat="partner in type.partners"> 
    <label class="checkbox-inline"> 
     <input type="checkbox" value="partner" 
     ng-checked="report.participatingPartners[$parent.$index].indexOf(partner) !== -1" 
     ng-click="toggleSelection($parent.$index, $index);"> 
     <p><span></span>{{partner.name}}<p> 
    </label> 
</div> 

而在我的控制,只是爲了測試這個設置:

var vm = this; 
vm.toggleSelection = toggleSelection; 

。 ...

function toggleSelection(typeId, partnerId) { 
    console.log("toggleSelection called"); 
    console.log(typeId, partnerId); 
} 

當我點擊複選框或其標籤時,該函數永遠不會被調用。這是爲什麼?

我知道這不是controllerAs語法,因爲其他功能工作正常。

+1

如果您使用的是controller,那麼在函數'toggleSelection(...)'之前是不是錯過了控制器的名稱? –

回答

2

您可能要使用的屬性是ng-change。角度輸入指令不具有ng-clickedng-checked

請參閱docs

-1

你已經寫了下面的代碼:

ng-checked="vm.toggleSelection($parent.$index, $index);" 

但它應該是:

ng-checked="toggleSelection($parent.$index, $index);" 

只是刪除 「VM」

+0

對不起,但事實並非如此,這實際上是我的複製粘貼錯誤。 – Tiago

+0

@Tiago請提供關於JS小提琴或Plunker的代碼。 –

+0

你說他寫了一行他沒有......你搞砸了;)。 – Kickaha

1

通過讓您試圖在引用函數ng-click轉換爲$scope而不是this click事件應該根據需要進行綁定。

在控制器...

$scope.toggleSelection = toggleSelection; 

function toggleSelection(typeId, partnerId) { 
    ... 
} 

在HTML ...

<input type="checkbox" value="partner" 
    ng-click="toggleSelection($parent.$index, $index);"> 

這裏是它的一個簡單Fiddle工作。

+0

爲什麼? 「這個」語法不應該像範圍一樣工作嗎? – Tiago

+0

因爲'this'引用控制器對象而不是'$ scope'對象。這是兩件不同的事情。 '$ scope'是控制器暴露給視圖的API。該視圖無法訪問控制器對象上的功能。澄清閱讀這個優秀的答案http://stackoverflow.com/a/14168699 – hally9k