我在svg中绘制了几个元素(使用ng-switch
)并在它们上处理鼠标事件。控制器看起来像这样(有更多类型的元素,更鼠标事件处理的):如何在AngularJS中检测鼠标事件的目标模型
app.controller('MainCtrl', function($scope) {
$scope.elements = [
{ "type": "circle", "x" : 100, "y" : 200 },
{ "type" : "rect", "x" : 50, "y" : 20 }
];
$scope.mousedown = function(element, $event) {
$scope.msg = element.type;
};
});
里面的鼠标事件处理程序,我需要的鼠标事件的目标模式。 我目前的解决方案是将ng-mousedown="mousedown(element, $event)"
添加到每个svg元素,这是恼人的越来越多的元素类型。
<g ng-switch="p.type">
<g ng-switch-when="circle">
<circle ng-mousedown="mousedown(p, $event)"></circle>
</g>
<g ng-switch-when="rect">
<rect ng-mousedown="mousedown(p, $event)"></rect>
</g>
</g>
有没有办法从$event
属性($event.target
或$event.srcElement
给我点击的SVG元素,如何从这种获得模型添加ng-mousedown
才根SVG元素和获取点击的元素的模型?)。
完整的示例: http://plnkr.co/edit/nfgVSBBaeJ9EFKNjYEJn
的'NG-repeat'块内部的伟大工程,但如果目前的范围没有'p'失败。任何关于'ng-repeat'之外或者嵌套'ng-repeat'内的元素的建议? – hansmaad
使用范围内的相应属性。答案的本质不是'.p',而是'angular.element(...)。scope()',它允许你访问元素的范围和'$ event.target',它给你的实际元件。你如何考虑范围是另一个问题。 –
现在,单元测试如何做到这一点? – FlavorScape