0

저는 AngularJS 1.3.0-beta.2, jQuery 2.1.0, Angular UI 0.11 및 Angular UI의 Tooltip 위젯의 커스텀 버전을 사용하고 있습니다. 클릭하면 툴팁 내에서 버튼을 클릭하여 툴팁을 닫으려고합니다.어떻게 다른 처리기에서 angularjs 이벤트 처리기를 트리거 할 수 있습니까?

Plunkr

의 핵심 부분은 crud_tooltip.js에있다 : 372 :

scope.closePopup = function() { 
    var trigger = element.prev(); 
    if (scope.mode === 'timeout') { 
     $timeout(function() { 
     trigger.triggerHandler('click'); 
     }); 
    } 
    else { 
     trigger.triggerHandler('click'); 
    } 
    }; 

$ 제한 시간 작업을 사용하여 버전,하지만 버튼을 클릭하고 팝업 가까이 보는 사이에 눈에 띄는 지연이있다.

$ timeout을 사용하지 않는 버전에서는 [$ rootScope : inprog] $이 이미 적용 중입니다.. 어쨌든 팝업을 닫습니다 ... 왜 그런지 모르겠습니다.

사용자가 툴팁 내에서 버튼을 클릭 할 때 즉시 툴팁을 닫기 위해 closePopup (또는 클릭을 호출하는 클릭)을 어떻게 수정할 수 있습니까?

참고 : this Plunker을 지침으로 사용하여 각도 UI의 툴팁 코드에서 custom_tooltip.js 코드를 변경했습니다. 나는 또한 tt_isOpen 값을 직접 변경하고 새로운 crudtooltip-toggle 속성을 정의하려고 시도했다.

답변

1

어쩌면 내가 누락되었지만 코드가 매우 복잡하고 복잡한 기능으로 보입니다. 어쨌든 지연은 실제로 애니메이션이 끝날 때까지 기다리는 $timeout으로 인해 발생합니다. scope.tt_animation이 진실로 평가되기 때문에 시간 초과가 트리거됩니다. crud_tooltip.js 줄에서 시간 제한을 0으로 변경하면 문제가 해결됩니다. 여기에 문제 영역의 this plunk

참조 :

  if (scope.tt_animation) { 
       transitionTimeout = $timeout(removeTooltip, 500); 
      } else { 
       removeTooltip(); 
      } 
+0

감사합니다, 나는 전에 그 부분을 놓친 방법을 모른다! 코드 복잡성과 관련하여 ui-bootstrap-tooltip으로 범위 분리를 지원하도록 변경되었으며 다시 Simple-ish Plunkr 예제로 변경되었습니다. Plunkr에서는 지나치게 복잡하지만 내 코드 기반에서는 그렇지 않습니다. – Aaron

1

당신은 틀린 것을보고 있습니다.

그 지연은 다른 곳에서 오는 것이고 $ timeout뿐만 아니라 notimeout 메소드 (물론 오류는 무시하지만, 처음에는 $scope.$$phase을 확인하여 쉽게 수정할 수 있습니다)에 바인딩되어 있습니다.

또한 원래 링크를 클릭하면 두 가지 모두 마감일이 지연됩니다.

그래서 4 가지 경우에 동일한 지연이 발생합니다. 즉, 코드에 무엇인가 의미가 있습니다. 내가 다른 원인을 발견하면 다시 한 번 훑어보고 대답을 업데이트 할 것입니다.

관련 문제