洪强二手车 發表於 2019-12-26 14:53:00

Angular 8 配置文件

<p>给Angular 8 client 添加 json 配置文件,用来存储:版本号,WebApi 地址等等。要求 json 文件必须在页面访问 webapi 前获得到,不然数据服务中无法获得配置的 WebApi 地址。</p>
<p>&nbsp;</p>
<p><strong>1. 创建配置文件</strong></p>
<p style="margin-left: 60px">你可以在 assets 目录下创建配置文件,也可以自己创建一个目录。这里我在 src 目录下创建了一个 config 目录,用来存放 开发和 发布两个环境下的配置文件</p>
<p style="margin-left: 60px"><img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226143529064-866515999.png" alt=""></p>
<p>&nbsp;</p>
<p>文件内容如下:</p>
<p style="margin-left: 90px"><img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226143559322-161963775.png" alt="">&nbsp; &nbsp;<img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226143643507-625083550.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-left: 60px">development.json, 用来配置开发环境变量, production.json 用来配置发布环境变量</p>
<p>&nbsp;</p>
<p><strong>2. 创建一个config.service.ts 文件, 用来定义个config 模块&nbsp;</strong></p>
<p>模块作用:</p>
<ul>
<li>根据当前运行环境,自动加载 developement.json 或者product.json 下的内容到一个 json 对象</li>
<li>将 config 配置成程序启动需要初始化的对象</li>
<li>提供 get 方法,访问配置文件对象的值&nbsp;</li>
</ul>
<table style="height: 735px; width: 1449px" border="0">
<tbody>
<tr>
<td>
<div>
<div>import&nbsp;{&nbsp;Injectable,&nbsp;APP_INITIALIZER&nbsp;}&nbsp;from&nbsp;'@angular/core';</div>
<div>import&nbsp;{&nbsp;HttpClient&nbsp;}&nbsp;from&nbsp;'@angular/common/http';</div>
<div>import&nbsp;{&nbsp;Observable&nbsp;}&nbsp;from&nbsp;'rxjs';</div>
<div>import&nbsp;{&nbsp;environment&nbsp;}&nbsp;from&nbsp;'../../environments/environment';</div>
<br><br>
<div>@Injectable()</div>
<div>export&nbsp;class&nbsp;ConfigService&nbsp;{</div>

<br>
<div>&nbsp;&nbsp;private&nbsp;_config:&nbsp;Object</div>
<div>&nbsp;&nbsp;private&nbsp;_env:&nbsp;string;</div>

<br>
<div>&nbsp;&nbsp;constructor(private&nbsp;http:&nbsp;HttpClient)&nbsp;{&nbsp;}</div>

<br>
<div>&nbsp;&nbsp;load()&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._env&nbsp;=&nbsp;'development';</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(environment.production)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._env&nbsp;=&nbsp;'production';</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(this._env)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.http.get('./config/'&nbsp;+&nbsp;this._env&nbsp;+&nbsp;'.json')</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.subscribe((data)&nbsp;=&gt;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._config&nbsp;=&nbsp;data;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve(true);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(error:&nbsp;any)&nbsp;=&gt;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.error(error);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Observable.throw(error&nbsp;||&nbsp;'Server&nbsp;error');</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;});</div>
<div>&nbsp;&nbsp;}&nbsp;&nbsp;</div>

<br>
<div>&nbsp;&nbsp;//&nbsp;Gets&nbsp;a&nbsp;value&nbsp;of&nbsp;specified&nbsp;property&nbsp;in&nbsp;the&nbsp;configuration&nbsp;file</div>
<div>&nbsp;&nbsp;get(key:&nbsp;any)&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this._config;</div>
<div>&nbsp;&nbsp;}</div>
<div>}</div>

<br>
<div>export&nbsp;function&nbsp;ConfigFactory(config:&nbsp;ConfigService)&nbsp;{</div>
<div>&nbsp;&nbsp;return&nbsp;()&nbsp;=&gt;&nbsp;config.load();</div>
<div>}</div>

<br>
<div>export&nbsp;function&nbsp;init()&nbsp;{</div>
<div>&nbsp;&nbsp;return&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;provide:&nbsp;APP_INITIALIZER,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;useFactory:&nbsp;ConfigFactory,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;deps:&nbsp;,</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;multi:&nbsp;true</div>
<div>&nbsp;&nbsp;}</div>
<div>}</div>

<br>
<div>const&nbsp;ConfigModule&nbsp;=&nbsp;{</div>
<div>&nbsp;&nbsp;init:&nbsp;init</div>
<div>}</div>

<br>
<div>export&nbsp;{&nbsp;ConfigModule&nbsp;};</div>

</div>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>3. 在 app.module.ts 中,引用配置 config 模块</strong></p>
<div style="margin-left: 60px">import&nbsp;{&nbsp;ConfigModule,&nbsp;ConfigService&nbsp;}&nbsp;from&nbsp;'./services/config.service';</div>
<p style="margin-left: 90px">&nbsp;<img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226144623046-2033285035.png" alt=""></p>
<p>&nbsp;</p>
<p><strong>&nbsp;4. 在 数据服务中,获取配置</strong></p>
<p style="margin-left: 90px"><img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226144803724-22687118.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>注意:</strong></p>
<p>如果你跟我一样是在 assets 目录外创建的 配置文件或者目录,那么在运行时,你可能遇到找不到配置文件的问题。那是因为Angular 会自动把 assets 当做资源目录,而我们新创建的目录、文件并不会作为资源目录。</p>
<p>你需要在 angular.json 中将你自己创建的资源目录或文件指定一下:</p>
<p style="margin-left: 90px"><img src="https://img2018.cnblogs.com/blog/392690/201912/392690-20191226145216682-26573784.png" alt=""></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/crdanding/p/12097543.html
頁: [1]
查看完整版本: Angular 8 配置文件