Получить объект по 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 такое потом получится портировать?
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
ozknemoy
@ozknemoy
яваскриптист
советую сразу забыть про порт единички в четверку. это маркетинг от разрабов.
при минификации такой код не будет работать. надо подрубать например вебпаковский ngInject.
чтобы было по проще можно пока не использовать резолвы. имхо сомнительной нужности штука. чтоб все заработало нажо инжектить резолв entry в контроллер
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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