Angular Maps를 사용하여지도 애플리케이션을 구축 중이며 JSON 파일을 위치를 정의하는 마커 목록으로 가져오고 싶습니다. 이 JSON 파일을 app.component.ts 내부의 marker [] 배열로 사용하고 싶습니다. TypeScript 파일 내에 하드 코딩 된 마커 배열을 정의하는 대신.
내 프로젝트에서 사용하기 위해이 JSON 파일을 가져 오는 가장 좋은 프로세스는 무엇입니까? 어떤 방향으로도 대단히 감사합니다!
답변
Aonepathan의 one-liner는 최근 typescript 업데이트까지 나를 위해 일했습니다.
이 스 니펫을 TS 정의 파일에 게시 할 것을 제안하는 Jecelyn Yeen의 게시물 을 찾았습니다.
typings.d.ts
아래 내용으로 프로젝트의 루트 폴더 에 파일 추가
declare module "*.json" {
const value: any;
export default value;
}
다음과 같이 데이터를 가져옵니다.
import * as data from './example.json';
2019 년 7 월 업데이트 :
Typescript 2.9 ( docs )는 더 좋고 스마트 한 솔루션을 도입했습니다. 단계 :
- 파일에 다음
resolveJsonModule
행으로 지원을 추가tsconfig.json
하십시오.
"compilerOptions": {
...
"resolveJsonModule": true
}
import 문은 이제 기본 내보내기를 가정 할 수 있습니다.
import data from './example.json';
intellisense는 이제 json 파일을 확인하여 Array 등의 메소드를 사용할 수 있는지 확인합니다. 정말 멋진.
답변
이 reddit 게시물 에서 언급했듯이 Angular 7 이후에는 다음 두 단계로 작업을 단순화 할 수 있습니다.
- 그 세 줄을하기 위해 추가
compilerOptions
당신의tsconfig.json
파일 :
"resolveJsonModule": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
- json 데이터를 가져옵니다.
import myData from '../assets/data/my-data.json';
그리고 그게 다야. 이제 myData
구성 요소 / 서비스에서 사용할 수 있습니다 .
답변
@ryanrain 답변을 기반으로 한 Angular 6+에 대한 완전한 답변은 다음과 같습니다.
에서 각-CLI 문서 , JSON은 자산으로 간주 될 수 있으며 아약스 요청을 사용하지 않고 표준 수입에서 액세스.
“your-json-dir”디렉토리에 json 파일을 추가한다고 가정 해 보겠습니다.
-
“your-json-dir”을 angular.json 파일 (:
"assets": [
"src/assets",
"src/your-json-dir"
] -
(프로젝트 루트에서) typings.d.ts 파일을 작성하거나 편집하고 다음 컨텐츠를 추가하십시오.
declare module "*.json" {
const value: any;
export default value;
}그러면 typescript 오류없이 “.json”모듈을 가져올 수 있습니다.
-
컨트롤러 / 서비스 / 기타 파일에서 다음 상대 경로를 사용하여 파일을 가져 오면됩니다.
import * as myJson from 'your-json-dir/your-json-file.json';
답변
입력하신 분들께 감사 드리며, 수정 사항을 찾을 수 있었고 app.component.ts 파일 위에 json을 추가하고 정의했습니다.
var json = require('./[yourFileNameHere].json');
이것은 궁극적으로 마커를 생성하고 간단한 코드 라인입니다.
답변
첫 번째 해결책 -.json 파일의 확장자를 .ts로 변경하고 export default
다음과 같이 파일의 시작 부분에 추가하십시오 .
export default {
property: value;
}
그런 다음 다음과 같이 타이핑을 추가 할 필요없이 파일을 가져 오기만하면됩니다.
import data from 'data';
두 번째 솔루션 은 HttpClient를 통해 json을 얻습니다.
다음과 같이 구성 요소에 HttpClient를 삽입합니다.
export class AppComponent {
constructor(public http: HttpClient) {}
}
다음 코드를 사용하십시오.
this.http.get('/your.json').subscribe(data => {
this.results = data;
});
이 솔루션은 여기에 제공된 다른 솔루션에 비해 한 가지 분명한 장점이 있습니다. json이 변경 될 경우 전체 애플리케이션을 다시 빌드 할 필요가 없습니다 (별도의 파일에서 동적으로로드되므로 해당 파일 만 수정할 수 있음).
답변
나는 몇 가지 응답을 읽었고 그들은 나를 위해 작동하지 않는 것 같습니다. Typescript 2.9.2, Angular 6을 사용하고 Jasmine Unit Test에서 JSON을 가져 오려고합니다. 이것이 나를 위해 트릭을 한 것입니다.
더하다:
"resolveJsonModule": true,
에 tsconfig.json
다음과 같이 가져 오기 :
import * as nameOfJson from 'path/to/file.json';
중지 ng test
하고 다시 시작하십시오.
참조 : https://blogs.msdn.microsoft.com/typescript/2018/05/31/announcing-typescript-2-9/#json-imports
답변
Angular 7+의 경우
1) “typings.d.ts”파일을 프로젝트의 루트 폴더에 추가합니다 (예 : src / typings.d.ts) :
declare module "*.json" {
const value: any;
export default value;
}
2) JSON 데이터 가져 오기 및 액세스 :
import * as data from 'path/to/jsonData/example.json';
...
export class ExampleComponent {
constructor() {
console.log(data.default);
}
}
또는:
import data from 'path/to/jsonData/example.json';
...
export class ExampleComponent {
constructor() {
console.log(data);
}
}