2015-12-30 29 views
0

使用AngularStrap。从控制器调用$ dropdown服务不会显示下拉菜单,但点击这些项目不会调用相应的代码。

普拉克来证明这一点。

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()也不起作用。 那么在这种情况下,下拉菜单的$范围是多少?它是包装ng-repeat元素的范围吗? – amahfouz

+0

如果您查看源代码dropdown.tpl.html,它实际上使用$ eval来评估您的点击字符串。有关$ eval的更多信息,请阅读http://stackoverflow.com/questions/15671471/angular-js-how-does-eval-work-and-why-is-it-d-ferent-from-vanilla-eval。关于范围,你没有把范围传递给它,所以$ dropdown为它自己创建了一个新的范围。如果您将当前范围传递给它,它将通过扩展您提供的范围来创建新范围。 – sdfacre