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입니까?
이 동작을 피델에서 재현 할 수 있습니까? 예제가 정상적으로 작동하면 API 호출 후에 모델이 업데이트됩니다. – gyc
여기에 간다 : https://jsfiddle.net/xgcphw0m/4/ 사용 된 geolocation. $ q 또는 $ http와 같은 각도 서비스를 사용했다면 작동 할 것이지만 $ apply로 콜백을 감싸기 때문입니다. 그게 내가 피하기를 원하는 것입니다. –
불행히도 나는 es6에 대해 많이 모른다. – gyc