2017-12-18 5 views
0

AngularJS 응용 프로그램에서 작업 중이며 다음과 같은 작업이 있습니다.

1) 버튼을 클릭합니다.
2) variableA === true이면 모달을 출력합니다.
3) variableA === false이면 모달을 팝핑하지 않고 다른 링크로 이동하십시오.
자바 스크립트를 통해 데이터 대상을 변경하십시오.

<span id = "id1" ng-click="getClickType($event,row)" href=""> Text </span> 

JS :

지금, 나는 다음과 같은 코드로 달성

HTML 노력하고 있어요 그래서

$scope.getClickType = function(event,row){ 
    $scope.activeElement = event.target; 
    if(row.type == "A"){ 
     $scope.activeElement.dataset.target = "#ModalA"; 
     $scope.activeElement.dataset.toggle = "modal"; 
     /* Here I don't have to use the hack and the data target changes automatically and the modal pops up*/ 
    } 
    else{ 
     someFunction().then(someOtherFunction); 
    } 
} 

someOtherFunction(msg){ 
    if (msg.varA == true){ 
     var f1 = $scope.activeElement.dataset.target; //hack 
     $scope.activeElement.dataset.target = "#ModalB"; 
     $scope.activeElement.dataset.toggle = "modal"; 
     if(f1 != $scope.activeElement.dataset.target){ //hack If statement 
      $timeout(function() { 
          $scope.activeElement.click(); 
         }); 
      /* Here i have use a hack and click on the element again to show the modal*/ 
     } 
    } 
    else{ 
     $scope.activeElement.dataset.target = ""; 
     $scope.activeElement.dataset.toggle = ""; 
     window.open(someURL); 
     /* works fine*/ 
    } 
} 

당신이 볼 수있는, 내가 해킹을 사용하고 있습니다 ModalB. someOtherFucntion()에서 dataset.target을 변경해도 모달이 팝업되지 않습니다. 다시 표시하려면 활성 요소를 다시 클릭해야합니다.

내 질문 :
왜 데이터 타겟을 변경하려면 다시 activeElement를 클릭해야합니까?
두 번째 기능에서만 필요한 이유는 무엇입니까?

어떤 도움
은 높게 평가 될 것이다.

미리 감사드립니다.

답변

0
된 SomeFuncion에 무슨 일

? 예를 들어 약속과 같은 각도예요. $ q 또는 $ http? $ scope에서 modalB를 실행하려고 시도 했습니까? $ apply function?

실수로 각도 범위에서 벗어나고 또는이 아닌 각 스크립트

$scope.$apply(function() { 
    $scope.activeElement.dataset.target = "#ModalB"; 
    $scope.activeElement.dataset.toggle = "modal"; 
} 

을 실행하거나 $ 범위를 호출 할 때 트릭이있다. $를 잘 열려 ModalB

$scope.activeElement.dataset.target = "#ModalB"; 
$scope.activeElement.dataset.toggle = "modal"; 
$scope.$apply() 

이를 한 후 적용 각도로 다이제스트를 수행하고 검사를 수행합니다. 그러나 여기에는 하나의 함정이 있습니다. 각도 컨텍스트에서 이미 다이제스트 루프를 수행하고 있다면,이 프로세스가 이미 진행 중임을 알리는 오류가 발생하여 오류가 다른 곳에서 발생합니다.

+0

안녕하세요, SomeFunction을, 나는 다음 결과 집합 (MSG)와 someOtherFunction에 약속을 반환 데이터베이스에서 저장 프로 시저를 호출하고 있습니다. 나에게 설명해 주시겠습니까? "$ scope에서 modalB를 실행하려고 했습니까? $ apply function"? 어떻게하면 될까요? - 고마워요 –

+0

또 다른 한가지는 $ http가이 약속을 처리합니까? 그렇지 않다면 $ q.when 메소드를 사용하여이 약속을 마무리 할 것을 제안합니다. https://docs.angularjs.org/api/ng/service/$q#when – erhardos

+0

안녕하십니까, $ http가 처리 중입니다. 응용 프로그램의 모든 컨트롤러에서 사용하는대로 변경할 수 없습니다. $ scope. $ apply에서 명령문을 실행하려고 시도했지만 데이터 범위 대상을 변경 한 후 $ scope. $ apply를 실행했지만 아무런 효과가 없습니다. 해킹을 사용하고 있어도 왜 그런 일이 일어나고 있는지 이해하고 싶습니다. –