Angular应用中需通过Http加载的文件应放置在何处?
Angular中Http加载静态JSON文件的正确存放位置
嘿,这问题我熟,给你捋清楚:
首先,你得把env.json放到项目的**src/assets文件夹**里——这是Angular CLI默认的静态资源存放目录,好处是不管你跑ng serve开发模式还是ng build生产构建,CLI都会自动把这个文件夹里的文件同步到对应的输出目录(开发模式是虚拟的服务器根目录,生产构建就是dist文件夹),不用手动复制。
然后你得改一下请求路径,原来的'env.json'要改成'assets/env.json',修改后的代码是这样:
this.http.get('assets/env.json') .map(res => res.json()).catch((error: any, caught: Observable<any>) => { console.log('加载配置文件失败'); return Observable.throw(error.json().error || 'Server error'); }).subscribe(() => { console.log('配置文件加载成功'); });
为啥原来的路径不行?
你直接写env.json的话,Angular的开发服务器会去它的根目录找,但没放在assets里的文件不会被CLI纳入资源列表,服务器自然找不到。而assets里的文件会被自动映射到服务器的/assets路径下,所以请求assets/env.json就能命中。
快速验证方法
启动ng serve后,打开浏览器直接访问http://localhost:4200/assets/env.json,如果能看到你的JSON内容,说明路径和存放位置都没问题了。
要是你不想用默认的assets文件夹,也可以自定义:打开angular.json,找到architect.build.options.assets数组,添加你自己的静态目录,比如:
"assets": [ "src/favicon.ico", "src/assets", "src/my-config-files" // 新增自定义静态目录 ]
这样src/my-config-files里的文件也会被自动同步,请求时用my-config-files/env.json就行。
内容的提问来源于stack exchange,提问作者BBaysinger
相关产品推荐
相关产品推荐

