Загрузка представления в фоновом режиме на основе данных из начального представления входа
Это не мой фактический вариант использования, но я пытаюсь понять концепцию загрузки представления на основе информации, которую другое представление использует с помощью appgyver supersonic framework.
У меня есть 3 страницы, Login.html, MainPage.html и Load.html. У каждого из них есть свой контроллер. Когда приложение открывается, оно сначала переходит на страницу входа. Страница входа отправляет имя пользователя и пароль на мой сервер, который затем возвращает успех или нет. Когда есть успех, приложение переходит на главную страницу. Я бы хотел, чтобы load.html понял, что произошел вход в систему, и начал загружать представление с соответствующим контентом для пользователей. Это так, когда пользователь переходит с главной страницы на страницу загрузки, вся информация уже загружена. Я пытаюсь понять концепцию, как сделать это с помощью сверхзвукового.
1 ответ
Вы можете использовать методы публикации / подписки между контроллерами.
Проверьте этот документ для некоторых хороших примеров.
По сути, вы хотите опубликовать сообщение с некоторыми данными, когда пользователь вошел в систему. Ваш контроллер для после входа в систему сможет прослушать или подписаться на это сообщение. Когда он получит сообщение, он сможет запустить любой код, который вы скажете в обратном вызове.
Один контроллер опубликует:
// gather some user data with successful login like var id = result.user.id
supersonic.data.channel('loginSuccess').publish({ userid: id });
Другой контроллер будет слушать:
supersonic.data.channel('loginSuccess').subscribe( function(data) {
$scope.id = data.userid;
// load some data based on user id
});
Вы также можете предварительно загрузить виды. Это может помочь ускорить процесс. Если вы этого не сделаете, вы можете увидеть счетчик между толчками. В structure.coffee
в папке config:
preloads: [
{
id: "viewIdYouSet"
location: "nameOfModule#view"
}
]
Когда вход в систему заканчивается, вы можете найти предварительно загруженное представление и поместить его в стек:
supersonic.ui.views.find("viewIdYouSet").then( function(startedView) {
supersonic.ui.layers.push(startedView);
});
Надеюсь это поможет.