2015-09-26 1 views
1

В моем угловом приложении, у меня есть форма с CheckBox входами:Углового вход флажка нг-клик никогда не называла

<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

Если вы используете контроллер как, вы не пропустите имя своего контроллера перед функцией 'toggleSelection (...)'? –

ответ

2

Атрибут, который вы, вероятно, хотите использовать, - ng-change. Директива углового ввода не имеет ng-clicked или ng-checked.

См. docs.

-1

Вы написали ниже код:

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

Но это должно быть:

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

Просто удалить "VM"

+0

Извините, но это было не так, на самом деле это была ошибка при копировании. – Tiago

+0

@Tiago Просьба представить код на JS Fiddle или 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

Смежные вопросы