2015-12-30 2 views
0

Использование AngularStrap. Вызов выпадающего сервиса $ с контроллера показывает всплывающее окно, но щелчок на элементах не вызывает соответствующий код.

Plunk, чтобы продемонстрировать это.

http://plnkr.co/edit/tNAX7liFSNh71XcOUecs

var dropdown = $dropdown(element, { 
      show: false, 
      trigger: "manual", 
      html: true 
     }); 

    dropdown.$scope.content = [ 
     { 
     "text": "<i class=\"fa fa-globe\"></i>&nbsp;Display an alert", 
     "click": "alert(\"Holy guacamole!\")" 
     }, 
     { 
     "divider": true 
     }, 
     { 
     "text": "Separated link", 
     "href": "#separatedLink" 
     } 
    ]; 

     element.on("contextmenu", function(event) { 
      event.preventDefault(); 
      console.log("dropdown right click"); 
      scope.$apply(function() { 
      scope.dropdown_show = true; 
      }); 
     }); 

ответ

1

Внимательный функция, которую вы пытаетесь вызвать должны существовать в области видимости.

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

dropdown.$scope.alert = function(str){ 
    alert(str) 
}; 
+0

Спасибо. Это работало для предупреждения. Смешно, даже console.log() в обработчике кликов не работает. Итак, что такое $ scope для выпадающего списка в этом случае? Является ли это областью обертывания ng-repeat? – amahfouz

+0

, если вы посмотрите на исходный код dropdown.tpl.html, он фактически использует $ eval для оценки вашей строки щелчка. Для получения дополнительной информации о $ eval, пожалуйста, прочитайте http://stackoverflow.com/questions/15671471/angular-js-how-does-eval-work-and-why-is-it-different-from-vanilla-eval. Что касается области видимости, вы не передали ей свой объем, поэтому раскрывающийся список $ создал для себя новую область. если вы передадите ему текущую область действия, она создаст новую область действия, расширив ту, которую вы предоставили. – sdfacre

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