Jul*_*vez 11 typescript ionic-framework ionic2 ionic3 angular
我正在开发一个ionic2项目,我需要创建一个新的自定义JSON配置文件.我发现了一些教程来创建一个并通过http.get访问它,但我认为通过get请求调用它是很奇怪的.我希望它在根文件夹(所有配置JSON都是)中,我直接打开/读取文件.
我不知道是否可能,甚至推荐?这就是为什么我在这里张贴有一些意见和解决方案:)
谢谢
seb*_*ras 14
我个人不喜欢通过使用http.get方式来处理配置信息来读取config.json文件,即使必须有另一种方法来在代码中包含和读取 json文件,因为我们正在使用Angular2和Typescript,为什么不使用类,接口并以更花哨的方式执行它?
我会告诉你接下来可能看起来比它应该更复杂,在第一(虽然看完后你会发现它非常简单,容易理解),但是当我开始学习Angular2我看到他们是如何处理的例子配置文件中在依赖注入引导我跟着,在应用程序我工作在处理的配置信息(如API端点,默认值,等等).
根据文件:
非类依赖项
[...]
应用程序通常使用许多小事实(例如应用程序的标题或Web API端点的地址)定义配置对象,但这些配置对象并不总是类的实例.
为非类依赖项选择提供者令牌的一种解决方案是定义和使用OpaqueToken
因此,您需要使用url等定义配置对象,然后OpaqueToken在使用您的配置注入对象时能够使用它.
我在app-config.ts文件中包含了所有配置
// Although the ApplicationConfig interface plays no role in dependency injection,
// it supports typing of the configuration object within the class.
export interface ApplicationConfig {
appName: string;
apiEndpoint: string;
}
// Configuration values for our app
export const MY_CONFIG: ApplicationConfig = {
appName: 'My new App',
apiEndpoint: 'http://www...'
};
// Create a config token to avoid naming conflicts
export const MY_CONFIG_TOKEN = new OpaqueToken('config');
Run Code Online (Sandbox Code Playgroud)
什么OpaqueToken可能会让人感到困惑,但它只是一个字符串,可以在注入此对象时避免命名冲突.你可以在这里找到关于这个的惊人帖子.
然后,您只需要将它包含在您需要的页面中,如下所示:
import { NavController } from 'ionic-angular/index';
import { Component, OpaqueToken, Injectable, Inject } from "@angular/core";
// Import the config-related things
import { MY_CONFIG_TOKEN, MY_CONFIG, ApplicationConfig } from 'app-config.ts';
@Component({
templateUrl:"home.html",
providers: [{ provide: MY_CONFIG_TOKEN, useValue: MY_CONFIG }]
})
export class HomePage {
private appName: string;
private endPoint: string;
constructor(@Inject(MY_CONFIG_TOKEN) private config: ApplicationConfig) {
this.appName = config.appName;
this.endPoint = config.apiEndpoint;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意如何将其包含在providers数组中
providers: [{ provide: MY_CONFIG_TOKEN, useValue: MY_CONFIG }]
Run Code Online (Sandbox Code Playgroud)
以及如何告诉注入器它应该如何获取配置对象的实例
@Inject(MY_CONFIG_TOKEN) config: ApplicationConfig
Run Code Online (Sandbox Code Playgroud)
OpaqueToken自v4.0.0以来已被弃用,因为它不支持类型信息,请InjectionToken<?>改用.
而不是这些线:
import { OpaqueToken } from '@angular/core';
// Create a config token to avoid naming conflicts
export const MY_CONFIG_TOKEN = new OpaqueToken('config');
Run Code Online (Sandbox Code Playgroud)
现在我们应该使用
import { InjectionToken } from '@angular/core';
// Create a config token to avoid naming conflicts
export const MY_CONFIG_TOKEN = new InjectionToken<ApplicationConfig>('config');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6135 次 |
| 最近记录: |