Инициализация приложения. undefined Инициализация приложения.

Инициализация приложения.

Open in new window

Инициализация приложения. APP_INITIALIZER токен.

Этот токен позволяет внедритсья в процесс инициализации приложения и выполнить какие то действия, например запросить с сервера настроечную информацию либо права пользователя прежде чем приложение начнет работу.

Этот токен используется как провайдер в главном модуле приложения.

Сервис.

import {Injectable, Inject} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import { APP_CONFIG } from '../settings';

@Injectable()
export class InitService {

  constructor(
    @Inject(APP_CONFIG) private app_config,
    private http: HttpClient
    ){}

  public init() {
    this.http.get(`${this.app_config.APIurl}/init`).subscribe(
      data => {
        console.log(data);
      },
      err => {

      }
    );
  }
}

Главный модуль.

Импортируем токен и сервис.

import { APP_INITIALIZER } from '@angular/core';

Определим анонимную функцию, которую будем использовать как фабрику в провайдере.

export function init_app(init_service: InitService) {
  return () => init_service.init();
}

Определим провайдера.

  providers: [...,InitService,
  ...
  {
    provide: APP_INITIALIZER,
    useFactory: init_app,
    deps: [InitService],
    multi: true
  },
  ],

deps - мы указывем какой объект передавать в функцию

multi - говорит о возможности вставлять несколько сервисов.

Django вьюха.

from rest_framework.views import APIView
from rest_framework.response import Response

class InitApp(APIView):
    """
       Initialization
    """
    def get(self, request, format=None):
        return Response({'status': 0, 'message': 'Ok'})

Django роут.

from account.views import InitApp

urlpatterns = [
    ...
    path(r'init/', InitApp.as_view()),
]

Результат работы роута.

init

Other topics