0

AngularMaterial의 $ mdDialog 서비스를 사용 중입니다.콜백 onRemoving에서 버튼 값 가져 오기

var highlighter = {}; 
$mdDialog.show({ 
    templateUrl: 'sample.html', 
    parent: angular.element(document.body), 
    clickOutsideToClose: true, 
    bindToController: true, 
    onRemoving: function (event, removePromise) { 
     if(highlighter.answer!==1) { 
      //Do something here 
     } 
     highlighter.answer = undefined; 
    } 
}) 
.then(function (answer) { 
    highlighter.answer = answer; 
}); 

show() 메소드에 의해 반환되는 약속을 mdDialog의 버튼 중 하나를 클릭 할 경우에만 해결합니다 - 여기에 내가 사용하고있는 샘플 코드입니다. 버튼 인덱스는 answer 매개 변수로 제공됩니다. 대답/단추 인덱스가 1이 아닌 경우에만 작업해야합니다. highlighter.answer은 버튼을 클릭 할 때 약속을 해결하기 전에 onRemoving이 호출되므로 문제가 발생했을 때 highlighter.answer에 적절한 값을 얻지 못했습니다. 필요한 (OnRemoving 콜백에서).

즉, 버튼을 클릭하지 않고 대화 상자가 닫히거나 버튼이 호출 될 때마다 onRemoving가 호출됩니다. 약속은 버튼을 클릭 할 때만 해결됩니다.

내 질문에, 거기에 약속 값을 확인한 후 호출됩니다 모든 콜백을 가질 수있는 방법입니다, 그래서 대답 값이 설정되어 있고 단추가 호출되는지 여부를 알 수 있습니다. 이 콜백은 약속이 해결되었는지 여부에 관계없이 대화 상자를 제거 할 때 호출되어야합니다.

+0

닫기/닫기 버튼이없는 대화 상자를 만드는 것이 더 간단하지 않습니까? 나는 당신이 사용하고있는 라이브러리를 모르지만 나는 어딘가에 그 옵션을 가지고 있다고 확신한다. 또 다른 옵션은 대답이 선택 될 때까지 대화 상자를 다시 던지는 것입니다. – Halcyon

+0

@Halcyon 외부의 클릭만으로 Dislog가 해제 될 수 있다는 것은 확실하지 않으므로 Dismiss 버튼이 필요합니다. 두 번째 제안은 잘못된 UX 디자인과 비슷합니다. – noob

답변

0

mdDialog은 약속을 위해 q 라이브러리를 사용하고 있으며 finally 조치가 있다는 것을 잊어 버렸습니다. 방금 finally 액션을 추가하고 onRemoving 코드를 입력해야했습니다. 그러면 청취자 인 onRemoving을 삭제할 수 있습니다.

$mdDialog.show({ 
    templateUrl: 'app/modules/hire/common/views/annotation.html', 
    parent: angular.element(document.body), 
    clickOutsideToClose: true, 
    bindToController: true 
}).then(function (answer) { 
    highlighter.answer = answer; 
}).finally(function() { 
    if(highlighter.answer!==1) { 
     //Do something here 
    } 
    highlighter.answer = undefined; 
}); 

This answer

솔루션을 찾는 나를 도와 - 마지막 코드는 다음처럼 보였다.