Заинжектить сервис в обычный класс
Имеется обычный класс TypeScript. Но при создании объекта этого типа необходимо получить доступ к глобальным настройкам приложения, реализуемый через доступ к сервису $SETTINGS. Как это делается в обычных компонентах Angular мне понятно, а вот как запихнуть сервис $SETTINGS в обычный класс -- не нашел. Или не осилил ответа. Помогите!
Пример кода:
export class User implements IUserWithPosition{
id: number;
login: string;
email: string;
img: string;
full_name: string;
private img_url = '';
private default_img = '';
constructor(
private data: IUserWithPosition,
private $SETTINGS: GlobalVars // ??????????????????
){
this.id = data.id;
this.full_name = data.full_name || '';
this.login = data.login || '';
this.email = data.email || '';
this.img = data.img || '';
if(this.login && this.img && this.login.length > 0 && this.img.length > 0){
this.img_url = `${$SETTINGS.get(`urlUserImage`)}${this.login.charAt(0).toLowerCase()}/`;
}else{
this.img_url = $SETTINGS.get(`urlUserImage`);
this.default_img = $SETTINGS.get('urlDefaultUserImage');
}
}
|
если долго не думать
private default_img = ''; private $SETTINGS = new GlobalVars(); constructor( private data: IUserWithPosition ) Либо инжектить этот сервис в тот кусок ангуляр-кода, в котором вызывается new User(). Ну и прокидывать ссылку соответственно в конструктор User. |
[quote=destus;496006]если долго не думать
private $SETTINGS = new GlobalVars(); Такая конструкция в итоге создаст ссылку на синглтон и все будет хорошо? Как-то даже не подумал о таком варианте. Попробую. Спасибо. |
Нет, такая конструкция создаст новый объекта GlobalVars. Если нужна именно ссылка, то вариант №2.
|
| Часовой пояс GMT +3, время: 02:10. |