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> 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;
});
});
谢谢。这对警报起作用。有趣的是,即使点击处理程序中的console.log()也不起作用。 那么在这种情况下,下拉菜单的$范围是多少?它是包装ng-repeat元素的范围吗? – amahfouz
如果您查看源代码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