为了账号安全,请及时绑定邮箱和手机立即绑定

定义全局常数

/ 猿问

定义全局常数

森栏 2019-10-05 10:53:48

在Angular 1.x中,您可以定义如下常量:


angular.module('mainApp.config', [])

.constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/')

Angular2(带有TypeScript)的等效功能是什么?


我只是不想在所有服务中一遍又一遍地重复API基本URL。


查看完整描述

3 回答

?
至尊宝的传说

以下更改适用于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);

    }

}


查看完整回答
反对 回复 2019-10-05
?
慕神8447489

由角度小组本身提供的配置解决方案可在此处找到。


这是所有相关代码:


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/"    

};

2)app.module.ts


import { APP_CONFIG, AppConfig } from './app.config';


@NgModule({

    providers: [

        { provide: APP_CONFIG, useValue: AppConfig }

    ]

})

3)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

    }   

}

现在,您可以将配置注入到任何地方,而无需使用字符串名称,也无需使用接口进行静态检查。


您当然可以进一步分离接口和常量,以便能够在生产和开发中提供不同的值,例如


查看完整回答
反对 回复 2019-10-05
?
万千封印

在Angular2中,您具有以下提供的定义,该定义使您可以设置各种依赖关系:


provide(token: any, {useClass, useValue, useExisting, useFactory, deps, multi}

与Angular 1比较


app.serviceAngular1中的等效于Angular2中的等效useClass。


app.factoryAngular1中的等效于Angular2中的等效useFactory。


app.constant并app.value已简化为useValue较少约束。即没有config障碍了。


app.provider -Angular 2中没有等效功能。


例子


要设置根注入器:


bootstrap(AppComponent,[provide(API_ENDPOINT, { useValue='http://127.0.0.1:6666/api/' })]);

或使用组件的进样器进行设置:


providers: [provide(API_ENDPOINT, { useValue: 'http://127.0.0.1:6666/api/'})]

provide 是以下方面的简称:


var injectorValue = Injector.resolveAndCreate([

  new Provider(API_ENDPOINT, { useValue: 'http://127.0.0.1:6666/api/'})

]);

使用进样器,很容易获得价值:


var endpoint = injectorValue.get(API_ENDPOINT);


查看完整回答
反对 回复 2019-10-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信