Angular-google-maps: apiKey ๋ณ€์ˆ˜๋กœ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2017๋…„ 02์›” 03์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: SebastianM/angular-google-maps

์‹ฑ๊ธ€ ํ†ค ๊ตฌ์„ฑ ์„œ๋น„์Šค์— Google API ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ฑ ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•).

@NgModule ๋‚ด๋ถ€์˜ ๋ชจ๋“ˆ์— apiKey ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

`@NgModule ({

์ˆ˜์ž…ํ’ˆ : [
BrowserModule,
CommonModule,
FormsModule,
AgmCoreModule.forRoot ({
apiKey : 'YOUR_KEY'// <-์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค !!! ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
})
],
๊ณต๊ธ‰์ž : [],
์„ ์–ธ : [AppComponent],
๋ถ€ํŠธ ์ŠคํŠธ๋žฉ : [AppComponent]
})`

stale discussion / question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์‚ฌ์šฉ์ค‘์ธ ๋นŒ๋“œ ๋„๊ตฌ์˜ ์ข…๋ฅ˜ (์˜ˆ : angular-cli ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์›นํŒฉ ๋˜๋Š” ...)์™€ ๋ณ€์ˆ˜์˜ ์ถœ์ฒ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ @NgModule ๋‚ด๋ถ€์˜ ๋„ˆ๋ฌด ๋งŽ์€ ๋™์  ์ฝ”๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ.

ํ˜„์žฌ ๊ตฌํ˜„ ํ•œ ์†”๋ฃจ์…˜์€ ๊ธฐ๋ณธ app.module์—์„œ 'lazy config provider'๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋งต์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ๋Š” forRoot์— ๋นˆ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

AgmCoreModule.forRoot()

๋‚ด app.module.ts์—์„œ :
์ฃผ์ž… ํ† ํฐ ๊ฐ€์ ธ ์˜ค๊ธฐ :

import { LAZY_MAPS_API_CONFIG }
  from 'angular2-google-maps/core/services';

@NgModule ์ œ๊ณต ์—…์ฒด์— ์ถ”๊ฐ€ :

providers: [
    {provide: LAZY_MAPS_API_CONFIG, useClass: GoogleMapsConfig}
  ],

๊ทธ๋ฆฌ๊ณ  LazyMapsAPILoaderConfigLiteral ์ธํ„ฐํŽ˜์ด์Šค ( 'angular2-google-maps / core / services'์˜ '์—์„œ)๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š”'GoogleMapsConfig 'ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

@Injectable()
class GoogleMapsConfig {
  apiKey: string;
...
  constructor() {
    apiKey = getMyApiKeyFromSomewhere()
...
  }
}

๊ทธ ์ฃผ์ž… ํ˜•์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์–ด๋”˜๊ฐ€์—์„œ ๊ตฌ์„ฑ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(์˜ˆ๋ฅผ ๋“ค์–ด angular-cli๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฑฐ๊ธฐ์—์„œ ํ™˜๊ฒฝ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋„๋ฉ”์ธ์„ ์ฝ๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ธก API๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  12 ๋Œ“๊ธ€

์‚ฌ์šฉ์ค‘์ธ ๋นŒ๋“œ ๋„๊ตฌ์˜ ์ข…๋ฅ˜ (์˜ˆ : angular-cli ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์›นํŒฉ ๋˜๋Š” ...)์™€ ๋ณ€์ˆ˜์˜ ์ถœ์ฒ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ @NgModule ๋‚ด๋ถ€์˜ ๋„ˆ๋ฌด ๋งŽ์€ ๋™์  ์ฝ”๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” AOT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ.

ํ˜„์žฌ ๊ตฌํ˜„ ํ•œ ์†”๋ฃจ์…˜์€ ๊ธฐ๋ณธ app.module์—์„œ 'lazy config provider'๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋งต์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ๋Š” forRoot์— ๋นˆ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

AgmCoreModule.forRoot()

๋‚ด app.module.ts์—์„œ :
์ฃผ์ž… ํ† ํฐ ๊ฐ€์ ธ ์˜ค๊ธฐ :

import { LAZY_MAPS_API_CONFIG }
  from 'angular2-google-maps/core/services';

@NgModule ์ œ๊ณต ์—…์ฒด์— ์ถ”๊ฐ€ :

providers: [
    {provide: LAZY_MAPS_API_CONFIG, useClass: GoogleMapsConfig}
  ],

๊ทธ๋ฆฌ๊ณ  LazyMapsAPILoaderConfigLiteral ์ธํ„ฐํŽ˜์ด์Šค ( 'angular2-google-maps / core / services'์˜ '์—์„œ)๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š”'GoogleMapsConfig 'ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

@Injectable()
class GoogleMapsConfig {
  apiKey: string;
...
  constructor() {
    apiKey = getMyApiKeyFromSomewhere()
...
  }
}

๊ทธ ์ฃผ์ž… ํ˜•์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์–ด๋”˜๊ฐ€์—์„œ ๊ตฌ์„ฑ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(์˜ˆ๋ฅผ ๋“ค์–ด angular-cli๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฑฐ๊ธฐ์—์„œ ํ™˜๊ฒฝ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋„๋ฉ”์ธ์„ ์ฝ๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ธก API๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์œ„์˜ ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. AoT ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ API ํ‚ค๊ฐ€ Google์ง€๋„์— ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ‚ค ๋ˆ„๋ฝ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” extended-define-webpack-plugin ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์ „์—ญ ๊ตฌ์„ฑ ์„ค์ • (๋นŒ๋“œ ์œ ํ˜• ๋“ฑ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๋  ์ˆ˜์žˆ๋Š” API ํ‚ค)์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

import { LAZY_MAPS_API_CONFIG, LazyMapsAPILoaderConfigLiteral } from 'angular2-google-maps/core/services';

@Injectable()
export class GoogleMapsConfig implements LazyMapsAPILoaderConfigLiteral {
  apiKey: string = CONFIG.googleMapsAPIKey;
}

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [{provide: LAZY_MAPS_API_CONFIG, useClass: GoogleMapsConfig}],
  bootstrap: [AppComponent]
})
export class AppModule {}

๊ทธ๋ฆฌ๊ณ ์ง€๋„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ฐ๋กœ๋“œ ๋œ ๋ชจ๋“ˆ์—์„œ AgmCoreModule.forRoot() ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” angular 4์™€ CLI 1.0.2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @kyranjamie ์—์„œ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์–ป์œผ๋ ค๊ณ ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ prod์™€ dev์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

`
@Injectable ()
๋‚ด๋ณด๋‚ด๊ธฐ ํด๋ž˜์Šค GoogleMapsConfig implements LazyMapsAPILoaderConfigLiteral {
๊ณต๊ฐœ apiKey : ๋ฌธ์ž์—ด;
constructor () {
if (environment.production) {
this.apiKey = ์—ฌ๊ธฐ์— ์‚ฝ์ž… ๋œ ํ‚ค
};
}
}
@NgModule ({
์„ ์–ธ : [
AppComponent
],
์ˆ˜์ž…ํ’ˆ : [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
AppRoutingModule,
NgbModule.forRoot (),
NouisliderModule,
AgmCoreModule.forRoot ()
],
์ œ๊ณต ์—…์ฒด : [
{์ œ๊ณต : LAZY_MAPS_API_CONFIG, useClass : GoogleMapsConfig}
],
๋ถ€ํŠธ ์ŠคํŠธ๋žฉ : [AppComponent]
})
export class AppModule {

}
`

if (environment.production) ์ด (๊ฐ€) ์ง„์‹ค๋กœ ํ•ด๊ฒฐ ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ?

๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@daBishMan ๋˜๋Š” @kyranjamie , ์—ฌ๋Ÿฌ๋ถ„์ด ์ด๊ฒƒ์„ ์•Œ์•„ ๋‚ธ ์ ์ด ์žˆ๋‹ค๋ฉด ์ตœ์ข… ์†”๋ฃจ์…˜์„ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? @kyranjamie , ๋‚ด ๋ฌธ์ œ๊ฐ€ ๊ท€ํ•˜์˜ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. AOT๊ฐ€ ๊ด€๋ จ๋œ ์ œํ’ˆ ๋นŒ๋“œ์—์„œ maps.google.com์— ๋Œ€ํ•œ ์š”์ฒญ์˜ agm-map ์ดˆ๊ธฐํ™”, ... URL API-KEY ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. . ๋”ฐ๋ผ์„œ "missing api key"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@ jorrit-wehelp, ๊ท€ํ•˜์˜ ์•ˆ๋‚ด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ๊ฒƒ์„ ์•„๋ž˜์— ํฌํ•จ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ....

import {Injectable} from "@angular/core";
import {LazyMapsAPILoaderConfigLiteral} from "@agm/core";
import {Config} from "../providers/config";

@Injectable()
export class MapsConfig implements LazyMapsAPILoaderConfigLiteral{
  public apiKey: string
  public libraries: string[]
  constructor(config: Config) {
    this.apiKey = config.get("MAP_API_JS_KEY")
    this.libraries = ['places']
    console.log("lazy map init with " + this.apiKey)
  }
}

๋‚ด ์ฃผ @ngmodule ์—์„œ ๊ณต๊ธ‰์ž์— ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...

    {
      provide: LAZY_MAPS_API_CONFIG,
      useClass: MapsConfig,
      deps: [Config]
    }

Config ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” Dev ๋˜๋Š” Prod ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ๋งต์˜ ์„ค์ •์„ ์„ค์ •ํ•˜๋Š” ๋นŒ๋“œ ํƒ€์ž„ ์›นํŒฉ ๋ณ€์ˆ˜ ๋Œ€์ฒด์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”

@ jorrit-wehelp ์ฃผ์„๊ณผ ๊ฐ™์ด ๋™์  ํ‚ค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ๋กœ๊ทธ ์•„์›ƒ ๋ฐ ๋กœ๊ทธ์ธ ํ›„ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ agmKey ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๊ณ ์ง€๋„๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ class GoogleMapsConfig ์™€ {provide: LAZY_MAPS_API_CONFIG, useClass: GoogleMapsConfig} ๋ฅผ์ง€๋„ @component ์•ˆ์—์„œ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

```...
'@ agm / core'์—์„œ {LAZY_MAPS_API_CONFIG, LazyMapsAPILoaderConfigLiteral} ๊ฐ€์ ธ ์˜ค๊ธฐ;
'@ pl-core / _services'์—์„œ {AuthService} ๊ฐ€์ ธ ์˜ค๊ธฐ

@Injectable ();
class GoogleMapsConfig implements LazyMapsAPILoaderConfigLiteral {
๊ณต๊ฐœ apiKey : ๋ฌธ์ž์—ด;
constructor () {
console.log ( '๋‚ด๋ถ€ ๋งต'); // ์ฝ˜์†”์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
this.apiKey = _authService.currentUser () && _authService.currentUser (). agmKey? _authService.currentUser (). agmKey : '';
_authService.getMapKey $ .subscribe ((key) => {
this.apiKey = ํ‚ค;
})
}
}

@๊ตฌ์„ฑ ์š”์†Œ({
์„ ํƒ๊ธฐ : 'map-comp',
templateUrl : './dyn-map.component.html',
styleUrls : [ './dyn-map.component.scss'],
์ œ๊ณต ์—…์ฒด : [{provide : LAZY_MAPS_API_CONFIG, useClass : GoogleMapsConfig}],
์บก์Šํ™” : ViewEncapsulation.None
})

```
๋กœ๊ทธ ์•„์›ƒํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธ ํ•œ ํ›„ ์ปจํŠธ๋กค์ด GoogleMapsConfig ํด๋ž˜์Šค์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ ??

@ jorrit-wehelp์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ–ˆ์ง€๋งŒ API ํ‚ค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด ์„œ๋น„์Šค๊ฐ€ ํ•ญ์ƒ ์ œ๋•Œ์— ๊ทธ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋Š” ์•Š๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„ํ—์ ์œผ๋กœ ๋งŒ์‹œ๋„ํ•˜๊ณ  ๋ Œ๋”๋ง ํ•  ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•ดAPI ํ‚ค๊ฐ€ ๋ฐ˜ํ™˜ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ์ด๋ ‡๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์ง€๋„ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒ์„ฑ์ž :

constructor(private envService: EnvironmentService) {
    this.envService.environment$.subscribe(environment => {
      // setTimeout is to wait a beat since my GoogleMapsConfig receives
      // the key at the same instant.
      setTimeout(() => this.gmapsApiKeyReady = true);
    });
  }

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งˆํฌ ์—…์—์„œ :

<agm-map *ngIf="gmapsApiKeyReady" ...></agm-map>

์ด๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ๋˜๋Š” ์‚ฌ๋ก€๋ณ„๋กœ ๋” ๋งŽ์ด ์ ์šฉ๋˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด๊ฒƒ์ด agm ์ž์ฒด์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ Angular์˜ AOT ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฐ๊ณผ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‚ด๊ฐ€ ๊ฒช์€ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๊ฐœ์š”์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ๋ฌธ์ž์—ด ๋Œ€์‹  API ํ‚ค ๊ตฌ์„ฑ์„ ๊ตฌ๋™ํ•˜์—ฌ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์„ ํ†ตํ•ด ์ด๋™ํ•˜๋ฉด ๋‹ค๋ฅธ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  API ์‚ฌ์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด .NET ๋ฐฑ์—”๋“œ์— ํ•„์š”ํ•œ ๊ฐ’์„ Example.Namespace.GoogleMapsApiKey ์ €์žฅ๋œ ์ „์—ญ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— JavaScript๋กœ ์ฃผ์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์—ฌ๊ธฐ์— TypeScript ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

// typings.d.ts
declare namespace Example.Namespace {
    export const GoogleMapsApiKey: string;
}

// app.module.ts
import { AgmCoreModule } from "@agm/core";
import { NgModule } from "@angular/core";

@NgModule({
    // ...
    imports: [
        AgmCoreModule.forRoot({
            apiKey: Example.Namespace.GoogleMapsApiKey,
        })
    ],
    // ...
})
export class AppModule {}

ํ•„์š”ํ•œ ๊ฐ’์œผ๋กœ ์ผ๋ถ€ const ์ „์—ญ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์œ ํ˜• ์ •์˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด AOT ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— ํฌํ•จ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AOT ์ปดํŒŒ์ผ๋Ÿฌ ๋Š” TypeScript ๋„๊ตฌ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ ๋งŒ ์ดˆ๊ธฐํ™” ๋œ ๋ณ€์ˆ˜ ๋ฐ ์ƒ์ˆ˜ ๋งŒ "์˜ค๋ฅ˜์˜€์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ข…์˜ LAZY_MAPS_API_CONFIG ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰