2016-01-24 2 views
0

Я новичок в Angular, и я работал над небольшим проектом. У меня вопрос о директивах и ng-click.Угловые директивы (ngclick not firing)

Каждый раз, когда я нажимаю на тег div для установки функции setlock(), он никогда не срабатывает. Может ли это быть вызвано тем, что моя директива и контроллер находятся в отдельных файлах? И есть ли способ сделать эту работу, используя ссылку:?

Спасибо.

Directive.js

(function(){ 
'use strict'; 

angular 
    .module('widget.ballslot') 
    .directive('ballSlot', ballSlot); 

function ballSlot(){ 

    var directive = { 
     restrict: 'E', 
     scope: true, 
     templateUrl: 'app/widgets/ballslot.html', 
     controller: 'Ballslot', 
    } 
    return directive; 
} 
})(); 

Controller.js

(function(){ 
'use strict'; 

angular 
    .module('widget.ballslot') 
    .controller('Ballslot', Ballslot); 

function Ballslot() { 
    var vm = this; 

    vm.locked = true; 

    function setlock() { 
     vm.locked = !vm.locked; 
    }; 

}; 
})(); 

page.html

<div data-ng-controller='Ballslot as vm' class='ball'> 
<div id='background-purple' ng-click='vm.setlock()'> 
    <i class="fa fa-lock" ng-hide="vm.locked"> </i> 
    <i class="fa fa-unlock-alt" ng-show="vm.locked"></i>  
</div> 
</div> 
+0

Пожалуйста отправьте весь код, чтобы мы могли посмотреть. –

+0

Извините, что – Msbart

+0

вы должны быть осторожны с определением вашей директивы. Кажется, у вас есть работоспособный ответ, но у вашего кода есть еще одна тонкая проблема. вы фактически заявили свой контроллер ** дважды **, один раз в определении директивы и второй раз в HTML. Не совсем ясно, где вы планируете использовать эту директиву (вы не используете ее в этом примере кода), но когда вы используете эту директиву, она, скорее всего, не будет действовать так, как вы ожидаете. – Claies

ответ

2

Looks как функция setLock не доступна для HTML. Это потому, что это частная функция, а не через vm.

Попробуйте изменить

function setlock() { 
    vm.locked = !vm.locked; 
}; 

К

vm.setlock = function() { 
    vm.locked = !vm.locked; 
}; 
+1

Закрыть, но 'vm.setlock = function() { vm.locked =! Vm.locked; }; 'будет работать лучше. :) –

+0

Это не работает, вместо этого отображаются оба значка. – Msbart

+0

Брайан Бейкер благодарит вас, эта работа сработала. Спасибо и за разъяснения, и за ответы. Теперь, как я должен идти об этом, так как ваше разъяснение было правильным, но код Брайана был прав? – Msbart