我在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