У меня есть несколько настроек, которые должны быть в файле конфигурации.
Например: URL API
Где лучшее место для него в Ionic 2?
У меня есть несколько настроек, которые должны быть в файле конфигурации.
Например: URL API
Где лучшее место для него в Ionic 2?
Неклассовые зависимости
Что, если значение зависимости не является классом? Иногда мы хотим внедрить строку, функцию или объект.
Приложения часто определяют объекты конфигурации с множеством мелких фактов (таких как название приложения или адрес конечной точки веб-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');
Что такое 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;
}
}
Обратите внимание, как включить его в массив providers
providers: [{ provide: MY_CONFIG_TOKEN, useValue: MY_CONFIG }]
И как сообщить инжектору, как он должен получить экземпляр объекта конфигурации
@Inject(MY_CONFIG_TOKEN) private config: ApplicationConfig
OpaqueToken
устарел, начиная с версии 4.0.0, поскольку он не поддерживает информацию о типе, вместо этого используйте InjectionToken<?>
.
Итак, вместо этих строк:
import { OpaqueToken } from '@angular/core';
// Create a config token to avoid naming conflicts
export const MY_CONFIG_TOKEN = new OpaqueToken('config');
Теперь мы должны использовать
import { InjectionToken } from '@angular/core';
// Create a config token to avoid naming conflicts
export const MY_CONFIG_TOKEN = new InjectionToken<ApplicationConfig>('config');
Сохраните их в синглтоне класса (как правило, это анти-шаблон) или даже в лучшем эквиваленте пространства имен.
class Singleton {
/* ... lots of singleton logic ... */
public someMethod() { ... }
}
// Using
var x = Singleton.getInstance();
x.someMethod();
Эквивалент пространства имен
namespace Singleton {
export function someMethod() { ... }
}
// Usage
Singleton.someMethod();
var x = Singleton; // If you need to alias it for some reason
getInstance()
методы.
- person Jagannath; 17.08.2016
Вы можете использовать либо таблицу WebSQL, либо таблицу SQLite, либо LocalStorage, поскольку оба метода очень хорошо поддерживаются платформами Ionic и гибридных приложений.