В большом приложении мне теперь нужно получить доступ к некоторым данным (вызов json api) асинхронно (раньше доступ к этим данным осуществлялся синхронно). Я бы не хотел менять реализацию компонентов, чтобы теперь справиться с этим асинхронным поведением (слишком рискованно).
Я подумал о функции «решения» $ routeProvider (с обещаниями), которая помогает абстрагировать это асинхронное поведение от компонентов / контроллеров.
К сожалению, я совершенно не использую маршрутизацию.
Есть ли для этого реализация? Если нет, с чего мне начать?
Обновлено:
как я был раньше (jsonData не загружались синхронно, но были прозрачными благодаря функциям systemJS, SystemJS, которые мы сейчас выбрасываем в мусор, отсюда и вопрос): https://plnkr.co/edit/BSreVYNAr7sijYwEpb5G?p=preview
Как я сейчас: https://plnkr.co/edit/WnX0ynOqkZsmEzIxl1SI?p=preview
Посмотрите на консоль, чтобы увидеть пример проблем, которые могут возникнуть сейчас.
Я вроде как заставил это работать, сделав так, но меня это не полностью устраивает (смотрите блок конфигурации): https://plnkr.co/edit/P9Rv6rnboFlaFZ0OARNG?p=preview
$provide.value('$provide', $provide);
$routeProvider.otherwise({
template: '<test></test>',
controller: function ($provide, myJsonData1) {
$provide.value('myJsonData', myJsonData1);
},
resolve: {
myJsonData1: function(){
return getMyJsonData();
}
}
});
Надеюсь это поможет :)
@StanislavKvitash вопрос обновлен
Большая часть обратного вызова .config, похоже, является повторяющимся шаблоном, только шаблон и получатель asyncData меняются от конфигурации к конфигурации. Если это так, и если вас беспокоит большой объем кода, вы можете написать, например, function apply(options) { return ($routeProvider, $provide) => {/* bulky code here */}; }, и составить свои .configs с гораздо менее громоздким .config([ "$routeProvider", "$provide", apply({ template: '<test></test>', getter: getMyJsonData })]).run(function ($route) { });.
Если вы обнаружите лучший подход, то, если повезет, вам нужно только заменить apply().


Можно ли увидеть вашу минимальную настройку, которая проиллюстрирует архитектуру вашего приложения?