Rrooom
@Rrooom

Как сделать предзагрузку моделей для AngularJS?

Для Backbone есть такое - backbonejs.ru/#FAQ-bootstrap

А как правильно делать для ангулара?

Есть дирректива ngInit, но её не особо рекомендовали на stackoverflow, мол не принято. Да и не очень красиво выходит, малоудобный синтаксис.
  • Вопрос задан
  • 2347 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А причем тут директива ng-init? В приведенном вами же примере нету вообще ничего такого.

Данные не должны быть храниться в шаблоне, ну тоесть в атрибутах в виде текста, что бы пришлось потом руками парсить. Если вы внимательно посмотрите на то, что будет на выходе приведенного вами примера, то увидите следующее:

Допустим наша коллекция будет иметь вид
[{id: 1, username: 'foo'}, {id: 2, username: 'bar'}];

тогда пользователю придет следующий шматок html:
<script>
  var accounts = new Backbone.Collection;
  accounts.reset([{id: 1, username: 'foo'}, {id: 2, username: 'bar'}]);
</script>


следовательно никакого парсинга руками backbone не производит.

Что можно сделать в angular. Можно объявить модуль-константу, которую будет использовать основное приложение. Если переделать приведенный вами же пример выйдет так:
<script>
angular.module('prefetchedData', [])
    .constant('users', <%= @accounts.to_json %>)
    .constant('projects', <%= @projects.to_json(:collaborators => true) %>);
</script>

В основном приложении уже можно инджектить эти данные куда вам нужно. и обрабатывать при той же инициализации. У этого способа есть свои недостатки, в частности ваше приложение начинает зависит от какого-то модуля prefetchedData, но зато мы избавляемся от необходимости делать эти данные глобальными, что даже лучше чем в случае с backbone где для этого надо было лепить кастыль, ну и опять же разруливать эти данные можно напрямую в сервисах, что так же удобно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kompi
@kompi
nullstack devoops
Как вариант, инициализировать данные через injector()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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