0

전에 해결하기 위해 각도 공장을 변경하려면 또는 잘못).어떻게이 <code>MapProvider</code>과 같이 기존 응용 프로그램을 사용하는 것을 주입

나는 지금 내가 가진 테스트로 일하고 얻을 수 있었다있는하는 BaiduMapsService을 추가해야합니다

mapModule.factory('MapProvider', ['$injector', function($injector) { 
    if(true) { 
     return $injector.get('GoogleMapsService'); 
    } else { 
     return $injector.get('BaiduMapsService'); 
    } 
}]); 

그리고 그에 따라 if 값을 틀지. (이 두 서비스는 모두 TypeScript 인터페이스를 사용하므로 동일한 방법을 사용합니다.) 이제 $http 호출을 API에 추가해야합니다.이 API는 제공된 데이터를 기반으로 사용할 맵을 반환합니다. 내 공장을 비동기로 만들려면 내 모든 MapProvider.someCallHere() 호출을 MapProvider.then(m => m.someCallHere())으로 변경해야합니다.

MapProvider을 내 응용 프로그램에 삽입하면 비동기 데이터 (한 번만)를 사용하여 해결할 수 있고 나중에 필요한 서비스를 주입 할 수 있습니다.

또는 API 호출을하고 어딘가에 전역 데이터를 설정할 때까지 Angular를 지연/지연하는 방법이 있습니까?

감사합니다.

답변

2

서버에서 데이터를 가져올 때까지 응용 프로그램 bootstrap을 연기 할 수 있습니다 (또한 ng-app을 사용하지 마십시오. 수동으로 수행하십시오). 나는이 전에 question에 대답했지만 각 경우마다 고유 한 세부 정보가 있습니다.

일반적으로 응용 프로그램이 부트 스트랩되기 전에 응용 프로그램에 선언 된 구성 값이 표시됩니다. 이는 멀티 테넌트 응용 프로그램에 매우 유용합니다. 따라서이 기본 설정 값은 전체 앱에서 주입 된 공급자로 사용될 수 있습니다. 예를 들어

:

var app = angular.module('app', []); 

// retrieve the $http provider 
var ngInjector = angular.injector(["ng"]); 
var $http = ngInjector.get("$http"); 

// load config function. Returns a promise. 
function loadConfig(){ 
    return $http.get("/config.json").then(function(response) { 
     // declare the configuration value on your app 
     app.constant("Config", response.data); 
    }, function(err) { 
     console.error("Error loading the application config.", err) 
    }); 
} 

// Call loadConfig then bootstrap the app 
loadConfig().then(function() { 
    angular.element(document).ready(function() { 
     angular.bootstrap(document, ["app"]); 
    }); 
}); 

마지막으로 당신의 공장에서, 당신이 선호하는지도를 검색 할 Config 상수를 사용할 수 있습니다.

mapModule.factory('MapProvider', ['$injector', 'Config', function($injector, Config) { 
    if(Config.preferedMap == 'GoogleMap') { 
     return $injector.get('GoogleMapsService'); 
    } else { 
     return $injector.get('BaiduMapsService'); 
    } 
}]); 
+0

감사합니다. 완벽하게 작동합니다. – SteveEdson

0

내가 생각할 수있는 유일한 방법은 "config"가 생길 때까지 angular (및 모듈) 전체를 초기화하는 것입니다 (설정은 전역 변수).