지시문이 데이터로 초기화되기 전에 서비스의 $ http.get이 완료되는지 확인하는 방법은 무엇입니까?

Setsuna

내 'control'지시문이 생성되거나 실제로 해당 항목을 추가하는 일부 함수가 호출되기 전에 "MyService"에서 검색해야하는 모든 데이터가 검색되도록하려면 어떻게해야합니까? 그렇지 않다면 컨트롤러와 관련된 다른 권장 방법이 있습니까? 유사한 시퀀스의 기본 예를 아직 보지 못했습니다. 데이터에는 다른 함수를 통해 더 많은 값이 추가 될 수 있으며,이 경우 새 데이터 요소에 대해 메서드를 명시 적으로 호출해야합니다.

서비스:

// var app = angular.module...
app.service('MyService', function($http) {
    this.data = [];

    // Called once to first initalize the data
    $http.get('data.json').then(function data(response) {
      this.data.push(response);        
    } 
})

지시문 (자체 분리 컨트롤러 포함? 또는 기본 앱 컨트롤러를 가리킴) ?:

myDirective.directive('control', ['Params', 'MyService', function(Params, MyService) {
     // Call on a method "addData(MyService.data) when the data is actually loaded
}]);
다이 웨이

지시문 양식 시작을 중지하고 서비스의 비동기 함수 호출을 기다릴 방법이 없다고 생각합니다. 그러나 여기에 몇 가지 대안이 있습니다.

1. ng-route를 사용하고로 해결을 설정합니다 $routeProvider.

API : http://docs.angularjs.org/api/ngRoute . $ routeProvider

기본적으로 라우트의 리졸버에서 프라 미스를 반환하면 라우트의 뷰는 프라 미스가 해결 될 때까지 기다립니다. 해결 후 뷰를로드하고 뷰 내에서 모든 컨트롤러 또는 지시문을 시작합니다.

2. 의 재산입니다 .$watchdataMyService

data변경 되면 원하는대로 수행

$scope.$watch(function() {
  return MyService.data;
}, function(newVal, oldVal) {
  // do something
}, true);

3.에서 ready이벤트를 트리거하고 MyService지시문에서 MyService를 수신합니다.

이를 위해서는 'EventEmitter'와 같은 일부 이벤트 라이브러리를 포함하고이를 MyService에 혼합해야합니다.

4. MyService에서 $broadcast이벤트를 준비 $rootScope하고 지시문에서 수신합니다.

app.service('MyService', function($http, $rootScope) {
    this.data = [];
    var _this = this;

    // Called once to first initalize the data
    $http.get('data.json').then(function data(response) {
      _this.data.push(response);
      $rootScope.$broadcast('MyServiceReady');
    } 
})


myDirective.directive('control', ['Params', 'MyService', function(Params, MyService) {
    return function(scope) {
      scope.$on('MyServiceReady', function() {
        // do something
      });
    };
}]);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관