angular.js에서 오른쪽 클릭 이벤트를 어떻게 처리합니까?
요소를 설정하여 왼쪽 클릭 (ng-click)에서 한 작업을 수행 한 다음 오른쪽 클릭에서 다른 작업을 수행하도록하는 방법이 있습니까?
지금은 다음과 같습니다.
<span ng-click="increment()">{{getPointsSpent()}}</span>
그리고 함수 decrement ();를 수행하기 위해 스팬을 마우스 오른쪽 버튼으로 클릭 할 수도 있습니다.
contextmenu
이벤트 를 사용하여 지시문을 사용하여 오른쪽 클릭시 특정 작업을 바인딩 할 수 있습니다 .
app.directive('ngRightClick', function($parse) {
return function(scope, element, attrs) {
var fn = $parse(attrs.ngRightClick);
element.bind('contextmenu', function(event) {
scope.$apply(function() {
event.preventDefault();
fn(scope, {$event:event});
});
});
};
});
안녕하세요 이것은 오래된 질문이지만 어떤 경우에는 더 간단하다고 생각하는 해결책이 있습니다. ngMousedown (및 ngMouseup) 지시문은 마우스 오른쪽 버튼으로 트리거되며 원본 마우스 이벤트에 액세스 $event
할 수 있으므로 다음과 같이 할 수 있습니다.
<span ng-mousedown="handleClick($event)"
oncontextmenu="return false"> <!-- use this to prevent context menu -->
{{getPointsSpent()}}
</span>
그런 다음 컨트롤러에서 다음을 수행 할 수 있습니다.
$scope.handleClick(evt) {
switch(evt.which) {
case 1:
increment(); // this is left click
break;
case 2:
// in case you need some middle click things
break;
case 3:
decrement(); // this is right click
break;
default:
alert("you have a strange mouse!");
break;
}
}
여기에 작동하는 바이올린이 있습니다. 수락 된 답변과 동일하게 작동하지만 완전히 새로운 지침을 만들 필요는 없습니다. 지시문이 더 나은 솔루션 일 수 있지만, 특히 많은 항목에 오른쪽 클릭 기능을 추가하려는 경우 더욱 그렇습니다. 그러나 어쨌든 다른 옵션.
한 가지 방법은 이벤트 처리기를 contextmenu
이벤트에 바인딩하는 지시문을 사용하는 것입니다 . 기본 메뉴가 표시되지 않도록 버블 링을 중지하는 데 어려움을 겪었습니다 document
. 로 시도 e.stopPropagation()
, e.preventDefault()
, return false
등. 문서 처리기에서 대상 확인이 잘 작동하는 것 같습니다.
app.directive('rightClick',function(){
document.oncontextmenu = function (e) {
if(e.target.hasAttribute('right-click')) {
return false;
}
};
return function(scope,el,attrs){
el.bind('contextmenu',function(e){
alert(attrs.alert);
}) ;
}
});
<button right-click alert="You right clciked me">Right click me</button>
데모 http://plnkr.co/edit/k0TF49GVdlhMuioSHW7i
이 지시문을 사용할 수 있습니다 .
<div ng-controller="demoCtrl" save-content="classic-html">
<div contextmenu="{{lists}}" class="box" click-menu="clickMenu(item)" right-click="rightClick($event)">
<span>normal dropmenu</span>
</div>
</div>
<script type="text/javascript">
angular.module('demo', ['ngContextMenu'])
.controller('demoCtrl', ['$scope', function($scope) {
$scope.lists = [{
name: '11'
}, {
name: '22'
}]
$scope.clickMenu = function (item) {
console.log(item);
};
$scope.rightClick = function (event) {
console.log(event);
};
}])
</script>
참고URL : https://stackoverflow.com/questions/15731634/how-do-i-handle-right-click-events-in-angular-js
'Nice programing' 카테고리의 다른 글
gzip으로 압축 된 스크립트의 크기를 어떻게 추정 할 수 있습니까? (0) | 2020.11.03 |
---|---|
Xcode 링커 오류 : 아키텍처 x86_64에 비해 파일이 너무 작습니다. (0) | 2020.11.03 |
PHPStorm에서 Ruby 구문 강조 표시를 얻을 수 있습니까? (0) | 2020.11.03 |
Bootstrap 3의 수평 양식 내에 중첩 된 인라인 양식 (0) | 2020.11.03 |
TypeScript의 EventTarget 유형에 'value'속성이 없습니다. (0) | 2020.11.03 |