Задать вопрос

Получить объект по id. Фабрика? Провайдер?

Angular 1.6 + ui-router

Сколько я не вникал в суть сервисов, провайдеров и фабрик так до конца их и не понял...
Пока нужен синглтон - все ок.

Как правильно в ui-router в resolve по id получить некий объект с сервера?
Для него есть ES6 класс с кучей методов. Этому объекту еще придется взаимодействовать с другими сервисами.

class EntryModel {
  constructor(data, $http, SomeService1, ...) { /* присваивание данных data и сохранение ссылок на сервисы */ }
  myFunc() { ... }
}
angular.module('module').service('Entry', function($http, SomeService1, ...) {
  return {
    getById: function(id) {
        return new Promise((resolve, reject) => {
            $http.get(`/entries/${id}`).then(result => {
                resolve(new EntryModel(result.data, $http, SomeService1, ...));
            }, error => {
                reject(error);
            });
        });
    }
  }
})
 .config(function ($stateProvider) {
   $stateProvider
      .state('ide', {
        url      : '/{app:[0-9a-fA-F]{8}}',
        component: 'ide',
        resolve  : {
            entry: function (Entry, $stateParams) {
                let entry = Entry.getById($stateParams.app);
                return entry;
            }
        }
    });
});

Я правильно делаю?
В angular 4 такое потом получится портировать?
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    Angular Developer
    5 месяцев
    Далее
  • Учебный центр IBS
    WEB-022 Разработка на Angular. Продвинутый уровень
    1 неделя
    Далее
  • Академия Eduson
    Frontend-разработчик
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
ozknemoy
@ozknemoy
яваскриптист
советую сразу забыть про порт единички в четверку. это маркетинг от разрабов.
при минификации такой код не будет работать. надо подрубать например вебпаковский ngInject.
чтобы было по проще можно пока не использовать резолвы. имхо сомнительной нужности штука. чтоб все заработало нажо инжектить резолв entry в контроллер
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы