2016-07-07 2 views
4

AngularJS 1.5 이전 버전에서는 지시어 나 뷰에서 변경 사항이 타사 비동기 콜백에서 변경되었을 때 ($ digest주기 사용) 확인되었습니다. $scope.$apply() 전화로 코드를 실행하는 것이 었습니다.AngularJS 1.5의 타사 비동기 콜백

구성 요소를 사용하여 내가 이해하는 한, $scope을 없애고 템플릿을 구성 요소의 컨트롤러에 바인딩하는 것입니다. $ scope에 의존하지 않고 뷰 대신 구성 요소를 작성하는 것으로 전환하려고합니다. .

function CompController(TPApi) { 
    let self = this; 
    this.endCallback = false; 
    TPApi.call(data,() => this.endCallback = true); 
} 

angular.module('app', []).component('myComp', { 
    controller: CompController, 
    template: '<div><span ng-show="$ctrl.endCallback">Callback Called</span></div>' 
}) 

여기에 문제는 있지만, $ 범위를 사용하지 않고 ng-show 컨트롤러에 바인더 제본 이중 때문이다 $ 콜백을 위해()를 적용, 변경 사항이 포착되지 않은 : 나는 다음과 같은 코드가 있다고 가정 해 봅시다 $ digest주기가 시작되지 않기 때문에 ng-show에 의해. 이것은 컨트롤러에 $ scope를 삽입하고 $ apply를 호출해야하기 때문에 매우 성가시다.하지만 처음에는 $ scope에 의존하는 목적을 상실한다.

$q 서비스로 TPApi를 캡슐화하여 콜백이 발행 될 때 $ digest주기가 호출되도록하는 방법이 있다고 생각합니다. 하지만 어떤 시점에서 $q 대신 새로운 기본 Promise API를 사용하려는 경우 어떻게해야합니까?

$ digest를 트리거하지 않고이를 수행하는 현명한 방법이 있습니까? 아니면 $ scope 및 $ digest로 인해 본질적으로 결함이있는 각도 1입니까?

+0

이 동작을 피델에서 재현 할 수 있습니까? 예제가 정상적으로 작동하면 API 호출 후에 모델이 업데이트됩니다. – gyc

+0

여기에 간다 : https://jsfiddle.net/xgcphw0m/4/ 사용 된 geolocation. $ q 또는 $ http와 같은 각도 서비스를 사용했다면 작동 할 것이지만 $ apply로 콜백을 감싸기 때문입니다. 그게 내가 피하기를 원하는 것입니다. –

+0

불행히도 나는 es6에 대해 많이 모른다. – gyc

답변

0

제 3 자 API를 호출 중이므로 도착한 새 데이터를 업데이트하고 인식하려면 각도로 지정해야합니다. $ scope를 사용하지 않으려는 경우 $ timeout (사용자의 다이제스트주기를 트리거하는) 코드를 래핑 할 수 있습니다.

function CompController(TPApi) { 
    let self = this; 
    this.endCallback = false; 
    TPApi.call(data,() => $timeout(() => this.endCallback = true, 0)); 
}