2

난 그냥각도-UI-라우터 1.0.x로는 :에서는 event.preventDefault & event.defaultPrevented 대체

$transitions.onStart({}, function(tras){ 
    // need a code equivalent to e.preventDefault 
    // need a code to identify event.defaultPrevented 
    // other code goes here... 

    // get parent states 
    _o.util.getAncestorStates(toState.name, true).reverse() 
     .forEach(function (state) { 
      // certain condition to call event.preventDefault() 

      if(event.defaultPrevented) {....} 
    }); 
}); 

$transitions.onStart

$rootScope.$on('$stateChangeStart', function(e, ...){ 
    e.preventDefault(); 
    // other code goes here... 
}); 

으로 $stateChangeStart을 대체 나는 우리가를 방지 할 수 있습니다 추측 e.preventDefault() 대신 return $q.reject()을 추가하여 변환을 수행했지만 return $q.reject() 코드가 어떻게 실행되는지 이해할 수 없었습니다.

또한 event.defaultPrevented을 어떻게 바꿀 수 있습니까?

나는 transition.promise에서 뭔가를해야한다고 생각하지만 명확하지 않습니다.

죄송합니다. 공식 문서 - https://ui-router.github.io/ng1/docs/latest/을 쉽게 이해할 수 없습니다. 아무도 내가 위의 코드에 대한 더 나은 설명이나 대체 코드를 찾도록 도와 줄 수 있습니까? 당신은이 두 가지 옵션 중 하나를 선택할 수 있습니다

+0

나는 그냥'내가'필요합니까 이유를 이해하기 위해 전환 ... – tanmay

+0

좋아, 내가 방금 추가 한 더 조각을 취소 .onStart' '에서 FALSE'반환 할 수 있다고 생각 event.defaultPrevented '- 모든 부모 상태를 처리하고 특정 조건에서'event.preventDefault'를 호출하고 다른 부모 상태에 대해'event.defaultPrevented'를 검사합니다. – Garfield

+1

약속 체인을 사용하면 이전 블록이 취소되면 이후 '.then'블록의 코드를 건너 뜁니다. 이전 핸들러가 전환을 취소하면 onStart 핸들러는 호출되지 않습니다. 'event.defaultPrevented'는'onStart' 핸들러에서'true'가 될 수 없습니다. 대신에'onError' 핸들러 체인이 호출되고'event.defaultPrevented'가 true 인 경우에만 블록이 호출됩니다. – georgeawg

답변

3

당신의 논리에 따라 달라집니다 당신이 $transition.abort()을 사용할 수 있습니다

  • 1.0.3 각-UI-라우터 입니다. 비동기 호출 후 상태 변경을 중단해야하는 경우 클리너 선택. @tanmay 댓글에 말한대로

    $transitions.onStart({}, function($transition) { 
        $transition.abort(); 
        //more code... 
    }); 
    
  • 또한, 당신은 그것을 취소 return false 간단한을 사용할 수 있습니다. 이것은 비 안정 버전에서도 작동합니다 (1.0.0.beta 및 1.0.0.rc). (Check it in ui-rooter docs)

    $transitions.onStart({}, function($transition) { 
        //code ... 
        return false; 
    }); 
    
+1

'$ q.reject'와 함께 두 번째 점을 사용했는데 멋지게 작동했습니다. – Garfield