在Angular 1. x中,您可以这样定义常量:
angular.module('mainApp.config', [])
.constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/')
Angular(使用TypeScript)中的等价物是什么?
我只是不想在我的所有服务中一遍又一遍地重复API基url。
现在,我们可以简单地使用environments文件,如果您的项目是通过angular cli生成的,angular将提供默认值。
举个例子
在您的环境文件夹中创建以下文件
并且每个文件都可以保存相关的代码更改,例如:
>
environment.prod.ts
export const environment = {
production: true,
apiHost: 'https://api.somedomain.com/prod/v1/',
CONSUMER_KEY: 'someReallyStupidTextWhichWeHumansCantRead',
codes: [ 'AB', 'AC', 'XYZ' ],
};
<代码>环境。质量保证。ts
export const environment = {
production: false,
apiHost: 'https://api.somedomain.com/qa/v1/',
CONSUMER_KEY : 'someReallyStupidTextWhichWeHumansCantRead',
codes: [ 'AB', 'AC', 'XYZ' ],
};
<代码>环境。开发ts
export const environment = {
production: false,
apiHost: 'https://api.somedomain.com/dev/v1/',
CONSUMER_KEY : 'someReallyStupidTextWhichWeHumansCantRead',
codes: [ 'AB', 'AC', 'XYZ' ],
};
您可以将环境导入到任何文件中,例如服务clientUtilServices。ts
<代码>从“..//环境/环境'
getHostURL(): string {
return environment.apiHost;
}
打开angular cli文件。角度cli。json和内部“应用程序”:[{…}]
添加以下代码
"apps":[{
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts",
"qa": "environments/environment.qa.ts",
}
}
]
如果您想为生产构建,运行
ng build--env=prod
它将从environment.prod.ts
读取配置,就像您可以为qa
或dev
执行配置一样
我在我的提供商中做了如下工作:
import {Injectable} from '@angular/core';
@Injectable()
export class ConstantService {
API_ENDPOINT :String;
CONSUMER_KEY : String;
constructor() {
this.API_ENDPOINT = 'https://api.somedomain.com/v1/';
this.CONSUMER_KEY = 'someReallyStupidTextWhichWeHumansCantRead'
}
}
然后我可以访问任何地方的所有常量数据
import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
import {ConstantService} from './constant-service'; //This is my Constant Service
@Injectable()
export class ImagesService {
constructor(public http: Http, public ConstantService: ConstantService) {
console.log('Hello ImagesService Provider');
}
callSomeService() {
console.log("API_ENDPOINT: ",this.ConstantService.API_ENDPOINT);
console.log("CONSUMER_KEY: ",this.ConstantService.CONSUMER_KEY);
var url = this.ConstantService.API_ENDPOINT;
return this.http.get(url)
}
}
angular团队提供的配置解决方案可以在这里找到。
以下是所有相关代码:
1)app.config.ts
import { OpaqueToken } from "@angular/core";
export let APP_CONFIG = new OpaqueToken("app.config");
export interface IAppConfig {
apiEndpoint: string;
}
export const AppConfig: IAppConfig = {
apiEndpoint: "http://localhost:15422/api/"
};
app.module.ts
import { APP_CONFIG, AppConfig } from './app.config';
@NgModule({
providers: [
{ provide: APP_CONFIG, useValue: AppConfig }
]
})
your.service.ts
import { APP_CONFIG, IAppConfig } from './app.config';
@Injectable()
export class YourService {
constructor(@Inject(APP_CONFIG) private config: IAppConfig) {
// You can use config.apiEndpoint now
}
}
现在,您可以在任何地方插入配置,而无需使用字符串名称,也无需使用接口进行静态检查。
当然,您可以将接口和常数进一步分开,以便能够在生产和开发中提供不同的值。
以下更改适用于Angular 2最终版本:
export class AppSettings {
public static API_ENDPOINT='http://127.0.0.1:6666/api/';
}
然后在服务中:
import {Http} from 'angular2/http';
import {Message} from '../models/message';
import {Injectable} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
import {AppSettings} from '../appSettings';
import 'rxjs/add/operator/map';
@Injectable()
export class MessageService {
constructor(private http: Http) { }
getMessages(): Observable<Message[]> {
return this.http.get(AppSettings.API_ENDPOINT+'/messages')
.map(response => response.json())
.map((messages: Object[]) => {
return messages.map(message => this.parseData(message));
});
}
private parseData(data): Message {
return new Message(data);
}
}
A-Frame通过window.AFRAME浏览器全局变量来暴露其公共接口。 (require('aframe')). AFRAME属性 属性(Property) 描述 AComponent 组件(Component)原型。 AEntity 实体(Entity)原型。 ANode A-Frame元素继承的基础节点原型。 AScene 场景(Scene)原型。 components 已注册的组件对象
问题内容: 是否可以使用webpack定义全局变量以产生如下所示的结果: 我看到的所有示例都使用外部文件 问题答案: 有几种方法可以处理全局变量: 1)将变量放入模块中。 Webpack仅对模块进行一次评估,因此您的实例保持全局状态,并在模块之间进行更改。 因此,如果您创建像a之类的东西并导出所有全局变量的对象,则可以读取/写入这些全局变量。您可以导入一个模块,从功能中对对象进行更改,然后导入另一
问题内容: 我需要/想要在全局定义我的自定义分析器。因此,我根据以下答案编辑了ES的配置文件(elasticsearch.yml):是否可以自定义ElasticSearch以使用自己的停用词列表?相关条目是 但是当我尝试调用时,我得到了一个。 配置错误吗?(尽管我希望在启动过程中读取配置时遇到错误时,ES无法启动) 如何正确定义全局分析器? 编辑: 我正在使用版本0.90.0 问题答案: 问题出在
问题内容: 在我的代码中,我有: 然后,编译器将说“ NameError:全局名称a()未定义”。如果我将所有东西都从A类中取出,那没问题,但是如何在A类中定义方法?非常感谢你。 问题答案: 你需要调用调用从。是 不是 一个全球性的功能,它是在类中的方法。 您可能想通读有关类的Python教程,以获得更详细的信息。
问题内容: 我在Mac OS X上使用Python 2.6.1。 我有两个简单的Python文件(如下),但是当我运行时 我在终端上: 我尝试以不同的方式重命名文件和类,这就是为什么两端有x和z的原因。;) 文件sqlitedbx.py 文件update_url.py 问题答案: 您需要做:
本文向大家介绍Springboot之自定义全局异常处理的实现,包括了Springboot之自定义全局异常处理的实现的使用技巧和注意事项,需要的朋友参考一下 前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try.