λ¬Έμ μ€λͺ
ν΄λ¬μ€ν° λͺ¨λμ κ°μ Έμ€κΈ°λ§ νλ©΄ μ±μ΄ μ€λ¨λ©λλ€.
λ¬Έμ μ¬ν λ¨κ³ λ° μ΅μνμ λ°λͺ¨
λͺ¨λ λ§μ»€κ° ν΄λ¬μ€ν° μλμ μλ μ§λκ° μμ΅λλ€. 맡μ 쑰건λΆλ‘ λνλμ΄ μλ €μ§ λ¬Έμ κ° μκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈμμλ§(μλ²κ° μλ) λ λλ§λ©λλ€. κ·Έλ¬λ μ΄λ μμ μμ window
μ μ‘μΈμ€νλ €κ³ νκΈ° λλ¬Έμ μ¬μ ν μλ² μΈ‘ λ λλ§μ΄ μ€λ¨λ©λλ€. μ΄κ²μ κ΅¬μ± μμ μμ²΄κ° μΈμ€ν΄μ€νλμ§ μμκΈ° λλ¬Έμ λͺ¨λ μ΄κΈ°ν μ€μ λ°μν μ μμ΅λλ€.
νμ¬ νλ
ν΄λ¬μ€ν°λ₯Ό μ¬μ©νλ μ±μ μλ² μΈ‘ μ±μμ μ¬μ©ν μ μμ΅λλ€.
μμ/μνλ νλ
μ±μ΄ μ€λ¨λμ΄μλ μ λ©λλ€.
angular & angular-google-maps λ²μ
@angular/*
5.0.0@agm/core
at 1.0.0-beta.2κΈ°ν μ 보
ν΄κ²° λ°©λ² ATMμ μ°Ύκ³ μμ§λ§ λ¬Όλ‘ Universal μ±μ΄ μλ μ¬μ©μκ° μ무 κ²λ ν νμκ° μλ€λ©΄ μ’μ κ²μ
λλ€. μ°λ¦¬λ μ μ΄λ λͺ¨λ μ½λλ₯Ό isPlatformBrowser
κ°μΈμΌ νκ³ , κ°λ₯νλ€λ©΄ μλ²μμ μ§λλ₯Ό λ λλ§νλ λ°©λ²μ μμλΌ λκΉμ§ μ§κΈμ μ£Όμ μ¬νμΌλ‘ λμ΄ν΄μΌ ν©λλ€.
@lazarljubenovic μ λ©νμ΄ νμ¬λ‘μλ μ’μ μ루μ
μ΄ λ κ²μ
λλ€.
cc @jigfox
λλ μ΄κ²μ μ‘°μ¬ν κ²μ΄λ€
@lazarljubenovic μ λ λ²μ© μ±μ λν κ²½νμ΄ μκ³ isPlatformBrowser
μ¬λ°λ₯΄κ² μ¬μ©νλ λ°©λ²μ μ λͺ¨λ₯΄κ² μ΅λλ€. μ‘°μΈμ μ’ μ£Όμκ² μ΅λκΉ?
@jigfox λ¬Όλ‘ μ
λλ€! λ€μκ³Ό κ°μ΄ PLATFORM_ID
ν ν°μ κ΅¬μ± μμμ μ£Όμ
ν μ μμ΅λλ€.
constructor(@Inject(PLATFORM_ID) private platformId: any) {
}
κ·Έλ° λ€μ isPlatformBrowser
λλ isPlatformServer
μ κ°μ Angular ν¨μ λ₯Ό μ¬μ©νμ¬ νΉμ νλ«νΌμμλ§ νΉμ μ½λλ₯Ό 쑰건λΆλ‘ μ€νν μ μμ΅λλ€.
constructor(@Inject(PLATFORM_ID) private platformId: any) {
if (isPlatformBrowser(this.platformId)) {
console.log('This code runs only in browser')
}
}
μ΄κ²μ μ΄λμ λμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. window
λν νΈμΆμ js-marker-clustererμμ μ 곡νλ μ½λμ μμ΅λλ€.
markerclusterer.js#L698 λ° markerclusterer.js#L1270 λ°λΌμ cluster-manager.ts#L3 μ λνν΄μΌ ν©λκΉ?
λΈλΌμ°μ νλ«νΌμ΄ μλ κ²½μ° μ 체 ν΄λ¬μ€ν° νλ¬κ·ΈμΈμ λΉνμ±νν΄μΌ ν©λκΉ? νμ§λ§ window
μ°Έμ‘° μμ΄ λ€μ μμ±ν μ μκΈ° λλ¬Έμ markerclusterer.js λ€μ μμ±μ΄ λμμ΄ λ μ μμ΅λλ€.
μ, νμ¬ libμ μ½λμ λλ€. μ΄λ°. λ€μκ³Ό κ°μ λ§μ νλ κ²μ΄ λμμ΄ λλμ§ κΆκΈν©λλ€.
const oldWindow = window || {}
window = {
setTimeout: oldWindow.setTimeout
}
import 'js-marker-clusterer'
window = oldWindow
κ·Έλ¬λ λ³μκ° μΈμ€ν΄μ€νλμ§ μμκΈ° λλ¬Έμ μλ²κ° μ½λλ₯Ό μ€ννλ λμ window
λ₯Ό μ°Ύλ κ²μμ μ€λ¨λ κ²μ΄λΌκ³ μκ°ν©λλ€. λ°λΌμ μ’μ μκ°μΌμ§λΌλ κ·Έκ²λ μ€λ¨λ κ²μ
λλ€.
import
νμΌμ μμ λΆλΆμ΄ μλλΌ κ΅¬μ± μμ λ΄λΆμμ μνν μ μμ΅λκΉ? κ·Έκ² λ¬΄μ¨ μμ©μ΄κ² μ΅λκΉ?
그건 κ·Έλ κ³ , κ·Έ Googleμ§λ μ μ₯μμ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
μ°Έκ³ : μ΄ λ¦¬ν¬μ§ν 리λ νμ¬ μ μ§ κ΄λ¦¬λμ§ μμΌλ©° μμ¬μ λͺ©μ μΌλ‘λ§ λ³΄κ΄λ©λλ€.
κ·Έλ λ€λ©΄ μ°λ¦¬ μ€μ€λ‘ κ·Έκ²μ ν¬ν¬νλ κ²μ μ΄λ»μ΅λκΉ? κ·Έκ²μ μμ¬μ μΈ repoμ΄κΈ° λλ¬Έμ window
λ₯Ό μ ν μ¬μ©νμ§ μλ μ체 μ‘°μ λ²μ μ μ¬μ©νλ κ²λ§μΌλ‘λ λ¬Έμ κ° μλ€λ κ²μ μλ―Ένλ λ³κ²½λμ§ μμ΅λλ€.
μ, κ·Έλ¦¬κ³ μ΄κ²μ κ΄ν΄μ:
κ·Έλ¬λ λ³μκ° μΈμ€ν΄μ€νλμ§ μμμΌλ―λ‘ μλ²κ° μ½λλ₯Ό μ€ννλ λμ μ°½μ μ°Ύλ κ²μμ μ€λ¨λ κ²μ΄λΌκ³ μκ°ν©λλ€. λ°λΌμ μ’μ μκ°μΌμ§λΌλ κ·Έκ²λ μ€λ¨λ κ²μ λλ€.
μ΄κ²μ λ§€μ° κΈ°λ³Έμ μΈ κ²μ²λΌ 보μ΄μ§λ§ λλ μ΄κ²μ λ©°μΉ μ μ λ°°μ μ΅λλ€.
if (window == null)
λλ μ΄μ μ μ¬ν μμ
μ μλνκ³ window
κ° λ°©λ¬Έν λ²μμ λ³μλ‘ μ‘΄μ¬νμ§ μμΌλ©΄ μ½λκ° ReferenceError
μ€λ¨λ©λλ€. κ·Έλ¬λ if (typeof window == 'undefined'
λ₯Ό μννλ©΄ window
κ° μ μΈλ μ μ΄ μλ κ²½μ°μλ μλ²½νκ² μλνκ³ μμν κ²°κ³Όλ₯Ό μ 곡ν©λλ€(μ΄λ μλ² λ¬Έμ μ).
ν΄λ¬μ€ν° 리ν¬μ§ν 리μ μ체 λ²μ μ κ°μ§κ³ λκ³ μ΄λ₯Ό μ¬μ©νμ¬ μνν μ μλ μμ μ νμΈν μ μμ΅λλ€.
λ€μ μ κ·Ό λ°©μμ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €κ³ νμ΅λλ€.
http://ideasintosoftware.com/typescript-conditional-imports/
κ·Έλ¬λ AOT μ»΄νμΌλ¬κ° μ§μλ¬Έμ λ μ΄μ μ°Ύμ μ μλ€κ³ λΆννκΈ° μμν κ²μ΄κΈ° λλ¬Έμ μ΄μ΄ μμμ΅λλ€.
μ, AOT μ»΄νμΌλ¬λ μ½λλ₯Ό μ μ μΌλ‘ λΆμνλ―λ‘ λμ κ°μ Έμ€κΈ°
νμ€ν Angularμμλ λΆκ°λ₯ν κ²μ²λΌ λ€λ¦½λλ€.
리ν¬μ§ν 리λ₯Ό λΆκΈ°νκ³ μ‘μΈμ€ κΆνμ μ κ±°νλ λ° μκ°μ΄ μμμ΅λκΉ?
window
? μ½κ² ν μ μλ λͺ κ΅°λ°μμλ§ μ¬μ©λλ κ² κ°μ΅λλ€.
νΌνλ€.
2017λ 12μ 27μΌ 18:06μ "cmddavid" [email protected]μ΄ μμ±νμ΅λλ€.
λ€μ μ κ·Ό λ°©μμ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €κ³ νμ΅λλ€.
http://ideasintosoftware.com/typescript-conditional-imports/
κ·Έλ¬λ AOT μ»΄νμΌλ¬κ° μ§μλ¬Έμ λν΄ λΆννκΈ° μμν κ²μ΄κΈ° λλ¬Έμ μ΄μ΄ μμμ΅λλ€.
λ μ΄μ μ°Ύμ μ μμ΅λλ€.
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ
λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/SebastianM/angular-google-maps/issues/1241#issuecomment-354144018 ,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AHTnkXZ85QbMrFT7timh9MPWDeL5piYiks5tEnkmgaJpZM4QmwTi
.
μμ§κΉμ§λ μλμ§λ§ μ΄λ² μ£Ό νλ°μ μλν΄ λ³Ό μ μμ΅λλ€. μ λ μμ€ μ μ₯μλ₯Ό λ³κ²½νλ κ²μ μ’μνμ§ μμ΅λλ€. λΉλ‘ νμ¬ μ μ§λκ³ μμ§λ μμ§λ§ λμ€μ λ μλ μμ΅λλ€. νμ§λ§ μ°λ¦¬μκ²λ λ€λ₯Έ μ νμ§κ° μλ κ² κ°μμ. κ°λ₯νλ€λ©΄ μ°½ μ°Έμ‘°λ₯Ό μμ ν μ κ±°νλΌλ μ μμ΄ λ§μμ λλλ€.
κΈμμ, λ§μ§λ§ μ
λ°μ΄νΈ μ΄νλ‘ 2λ
μ΄ μ§λ¬μΌλ μ κ° μκ°νλ μ΄μ λ
μ΄ νΉλ³ν κ²½μ°μ μ΅μν μμ ν΄κ²°μ±
μΌλ‘ λΆκΈ°ν©λλ€.
λ무 λμμ§ μμ κ²μ
λλ€.
2017λ 12μ 28μΌ λͺ©μμΌ μ€μ 1μ 4λΆμ cmddavid [email protected]μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μμ§κΉμ§λ μλμ§λ§ μ΄λ² μ£Ό νλ°μ μλν΄ λ³Ό μ μμ΅λλ€. λλ λ³νμ ν¬μ΄ μλλ€
μμ€ λ ν¬λ λΉλ‘ νμ¬ μ μ§λκ³ μμ§λ μμ§λ§,
λμ€μ λ μλ μμ΅λλ€. νμ§λ§ μ°λ¦¬μκ²λ λ€λ₯Έ μ νμ§κ° μλ κ² κ°μμ. λλ μ’μνλ€
μ°½ μ°Έμ‘°λ₯Ό μμ ν μ κ±°νλ μ μ
κ°λ₯ν©λλ€.β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/SebastianM/angular-google-maps/issues/1241#issuecomment-354198599 ,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AHTnkfZdUcmrInBzlNL41wJ6znRzWVCoks5tEtsHgaJpZM4QmwTi
.
js-marker-clusterer
νλ‘μ νΈλ₯Ό ν¬ν¬νκ³ μμ νμ΅λλ€. μλμ°κ° μ μλμ§ μμ κ²½μ°(μλ² μΈ‘ λ λλ§μμ) μ΄κΈ°ν MarkerClusterer
λ°©μ§ν©λλ€. λ°λΌμ λ§μ»€ ν΄λ¬μ€ν°λ¬λ μ΄μ λ κ²½μ° λͺ¨λμμ μ¬λ°λ₯΄κ² μλν©λλ€.
npmμ κ²μλμ΄ μμ΅λλ€. https://www.npmjs.com/package/js-marker-clusterer-universal
js-marker-clusterer
μ’
μμ±μ js-marker-clusterer-universal
λ‘ λ°κΏμΌ μ μ©λ©λλ€.
@mbrezovsky μ’μ μΌ, μ μκ² μ μλνκ³ μμ΅λλ€. κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νμ¬ @agm/js-marker-clusterer
μ κ΄λ ¨λ νλμ μ€λ₯κ° λ°μνμ΅λλ€. μ΄λ μμ§ Node.js/Firebase μΈ‘μμ νμ©λμ§ μμ΅λλ€. κ·Έλμ Anthony Nahasκ° μ¬κΈ°μ μ μν μ루μ
μ μ¬μ©νμ¬ μ½λλ₯Ό ES2015λ‘ λ³νν΄μΌ νμ΅λλ€. https: //github.com/SebastianM/angular-google-maps/issues/1052#issuecomment -331150772
μ΄ λ¬Έμ μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
@AoschkA μ΄μ μ견μμ μΈκΈν ν΄κ²° λ°©λ²μ μ¬μ ν μ¬μ©νκ³ μμ΅λλ€. μ¬κΈ°μμ λ΄ μλ₯Ό μ°Ύμ μ μμ΅λλ€. https://github.com/cmddavid/js-marker-clusterer.git
@cmddavid κ·νμ readmeλ agm/js-marker-clustererλ₯Ό μ€μΉνλ λ°©λ²μ μ€λͺ ν©λλ€. μ΄κ²μ μ°λ¦¬ μμ μ νλ‘μ νΈμ μ΄λ»κ² ν΅ν©ν©λκΉ?
@AoschkA , repoλ μ»΄νμΌλ μΆλ ₯μΌ λΏμ΄λ©°, μ§μ μ¬νμ΄ μμ΅λλ€. λ€μκ³Ό κ°μ΄ package.jsonμ μΆκ°ν μ μμ΅λλ€.
"@agm/js-marker-clusterer": "git+https://github.com/cmddavid/js-marker-clusterer.git"
μ€μΉνλ©΄ js-marker-clusterer without window is undefined μ€λ₯κ° λ°μνκ³ ES2015λ‘ μ»΄νμΌλμ΄ Firebaseμ κ°μ μλΉμ€μ νΈνλ©λλ€.
μλν©λλ€. μ΄κ²μ΄ AGMμμ ꡬνλ μ μλ€λ©΄ μ’μ κ²μ λλ€. κ·Έλ¬λ μ루μ @cmddavidμ κ°μ¬λ립λλ€!
@cmddavid λ§μνμ λλ‘ λ§λ€μλλ° ./node_modules/@agm/js-marker-clusterer/services/managers/cluster-manager.jsμ μ€λ₯κ° μμ΅λλ€.
λͺ¨λμ μ°Ύμ μ μμ: μ€λ₯: '.\node_modules\@agmjs-marker-clusterer\services\managers'μμ 'js-marker-clusterer-universal'μ νμΈν μ μμ΅λλ€.
@maksimbykov js-marker-clusterer-universal
μ΄ node_modules ν΄λμ μλμ§ νμΈν μ μμ΅λκΉ? npm i --save js-marker-clusterer-universal
μ€νν μ μλ κ²½μ°λ₯Ό λλΉνμ¬ μμ ν μ€μΉλμ§ μμμ μ μμ΅λλ€. λν νμΌ κ²½λ‘μ μ΄μν μΌμ΄ μΌμ΄λκ³ μλ κ² κ°μ΅λλ€. 첫 λ²μ§Έ νλͺ©μλ μ΄μ€ μ¬λμ //
μκ³ λ λ²μ§Έ νλͺ©μλ node_modules
μ @agm
μ¬μ΄μ λ°±μ¬λμ \
κ° μμ΅λλ€.
λν ν¨ν€μ§κ° μ¬μ ν angular 6μμ μλνλμ§ νμΈνμ§ μμλ€λ μ λ μΈκΈν κ°μΉκ° μμ΅λλ€.
@cmddavid μ λ§ κ°μ¬ν©λλ€! μλ§λ μ΄μ λλ νΌκ³€νκ³ λΆμ£Όμνμ κ²μ λλ€
μ΄ λ¬Έμ λ μ΅κ·Ό νλμ΄ μμκΈ° λλ¬Έμ μλμΌλ‘ μ€λλ κ²μΌλ‘ νμλμμ΅λλ€. λ μ΄μ νλμ΄ μμΌλ©΄ νμλ©λλ€. κ·νμ κΈ°μ¬μ κ°μ¬λ립λλ€.
"@agm/js-marker-clusterer": "git+ https://github.com/cmddavid/js-marker-clusterer.git " μ£μ‘νμ§λ§ μλνμ§ μμ΅λλ€(μ무κ²λ μ€μΉνμ§ λ§μμμ€)
js-marker-clusterer
νλ‘μ νΈλ₯Ό ν¬ν¬νκ³ μμ νμ΅λλ€. μλμ°κ° μ μλμ§ μμ κ²½μ°(μλ² μΈ‘ λ λλ§μμ) μ΄κΈ°νMarkerClusterer
λ°©μ§ν©λλ€. λ°λΌμ λ§μ»€ ν΄λ¬μ€ν°λ¬λ μ΄μ λ κ²½μ° λͺ¨λμμ μ¬λ°λ₯΄κ² μλν©λλ€.npmμ κ²μλμ΄ μμ΅λλ€. https://www.npmjs.com/package/js-marker-clusterer-universal
js-marker-clusterer
μ’ μμ±μjs-marker-clusterer-universal
λ‘ λ°κΏμΌ μ μ©λ©λλ€.
μ λ§ κ³ λ§μμ, λΉμ μ λ°©κΈ μ λ₯Ό ꡬνμ΅λλ€ ... λͺ μ :)
μ¬μ ν μ΄ λ¬Έμ κ° μμ΅λλ€. μ νμλ κ²μΌλ‘ νμλλμ?
λΉμ μ κ·Έκ²μ΄ μ νμλμλμ§μ λν μ€λͺ μ λ§ κ·Έλλ‘ λ°λνμ΅λλ€. μ λ¬Έμ λ«μλμ§ λ³΄μ ¨κ΅°μ.
@lazarljubenovic μ΄μ¨λ https://github.com/googlemaps/v3-utility-library/tree/master/packages/markerclustererplus λ‘ μ΄λν©λλ€.
λΉμ μ κ·Έκ²μ΄ μ νμλμλμ§μ λν μ€λͺ μ λ§ κ·Έλλ‘ λ°λνμ΅λλ€. μ λ¬Έμ λ«μλμ§ λ³΄μ ¨κ΅°μ.
μ΄μ λ€μ μ΄ μ μμ΅λλ€.λμ:
μ΄μ¨λ λΌμ΄λΈλ¬λ¦¬ λ΄λΆμμ js-marker-clustererλ₯Ό κ°μ Έμμ λ΄λ³΄λΌ μ μλ λͺ¨λμ λ§λλ κ²μ΄ λ κ°λ¨νμ§ μμ΅λκΉ?
λλ μ΄κ²μ λ΄ κ²μΌλ‘ νλ€:
https://github.com/alexnoise79/js-marker-clusterer (src/markerclusterer.js μ°Έμ‘°)
κ·Έλ¦¬κ³ λμ:
node_modules/@agm/js-marker-clusterer/fesm2015/agm-js-marker-clusterer.js
λλ μ μΈ Markerclustererλ₯Ό λ€μμΌλ‘ λ체νμ΅λλ€.
'js-marker-clusterer'μμ *λ₯Ό MarkerClustererλ‘ κ°μ Έμ΅λλ€.
κ·Έκ²μ μλνκ³ ssrμ 100% μ»΄νμΌν©λλ€.
μμ @mbrezovsky μ£Όμ μ λν λ΄ μ루μ κΈ°λ° - κ·Έλμ
"install:clusterer-universal": "npm i js-marker-clusterer-universal && rm -rf node_modules/js-marker-clusterer && mv node_modules/js-marker-clusterer-universal node_modules/js-marker-clusterer",
"postbuild": "npm run install:clusterer-universal"
κ·Έλ¦¬κ³ κ·Έκ²μ κ²°κ΅ μ€μΉλκ³ κ΅μ²΄λ κ²μ
λλ€.
κ·Έλ¦¬κ³ SSRμ΄ μλν©λλ€! :)
κ°μ₯ μ μ©ν λκΈ
js-marker-clusterer
νλ‘μ νΈλ₯Ό ν¬ν¬νκ³ μμ νμ΅λλ€. μλμ°κ° μ μλμ§ μμ κ²½μ°(μλ² μΈ‘ λ λλ§μμ) μ΄κΈ°νMarkerClusterer
λ°©μ§ν©λλ€. λ°λΌμ λ§μ»€ ν΄λ¬μ€ν°λ¬λ μ΄μ λ κ²½μ° λͺ¨λμμ μ¬λ°λ₯΄κ² μλν©λλ€.npmμ κ²μλμ΄ μμ΅λλ€. https://www.npmjs.com/package/js-marker-clusterer-universal
js-marker-clusterer
μ’ μμ±μjs-marker-clusterer-universal
λ‘ λ°κΏμΌ μ μ©λ©λλ€.