Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Заинжектить сервис в обычный класс (https://javascript.ru/forum/angular/75438-zainzhektit-servis-v-obychnyjj-klass.html)

sniffysko 09.10.2018 10:14

Заинжектить сервис в обычный класс
 
Имеется обычный класс 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');
		}
	}

destus 09.10.2018 12:11

если долго не думать
private default_img = '';
private $SETTINGS = new GlobalVars();

	constructor(
		private data: IUserWithPosition
	)

Либо инжектить этот сервис в тот кусок ангуляр-кода, в котором вызывается new User(). Ну и прокидывать ссылку соответственно в конструктор User.

sniffysko 09.10.2018 12:29

[quote=destus;496006]если долго не думать
private $SETTINGS = new GlobalVars();


Такая конструкция в итоге создаст ссылку на синглтон и все будет хорошо? Как-то даже не подумал о таком варианте.

Попробую. Спасибо.

destus 09.10.2018 12:43

Нет, такая конструкция создаст новый объекта GlobalVars. Если нужна именно ссылка, то вариант №2.


Часовой пояс GMT +3, время: 19:12.