Кордова угловое приложение на аппаратном нажатии кнопки назад, открыть последний открытый вид - PullRequest
0 голосов
/ 06 июля 2018

Вначале я вижу "А", а затем я загрузил несколько вещей из API. Теперь, когда по нажатию кнопки, я перехожу к представлению «B», а затем, когда по нажатию кнопки «назад» (кнопка «железо» / навигационная панель назад), я возвращаюсь к представлению A, но содержимое представления A уже уничтожено, и загружается только простое представление.

window.history.back();

Итак, я нашел способ, т. Е. При каждой загрузке представления, я добавил его в свой массив состояний localalstorage. и когда я нажал назад, я вернулся в предыдущее состояние.

this.router.navigate([previousState]);

Но это работает только при нажатии кнопки моей навигационной панели. При жестком нажатии на кнопку я возвращаюсь назад, но мое состояние не выбирается снова.

Мой код:

@Injectable()
export class AppStateService {
private menuOpen: boolean = false;
private headerTitle: string = "";
private offlineState: boolean = false;


public constructor(private router: Router) {
    document.addEventListener("backbutton", () => {
        this.back(true);
    }, false);
}

public back(hardwareClick?: boolean): void {

    var routes: string[] = [
        'Login',
        'Main'
    ];
    for (var i of routes) {
        var route = this.router.generate([i]);
        if (this.router.isRouteActive(route)) {
            this.exitApp();
            return;
        }
    }

    var  previousState = CordovaService.getPreviousState();
    this.router.navigate([previousState]);

}

Визуальный пример:

When view gets loaded first time

navigate from A to B

Clicking hardware back button B to A

хотя от B до A отлично работает, когда кнопка навигации назад навигационной панели В чем может быть проблема?

1 Ответ

0 голосов
/ 08 июля 2018

Вы пытаетесь решить проблему, созданную самим собой. Для начала не следует создавать несколько страниц в одном приложении Cordova.

Это первая разработка Best Practices Cordova принципы:

1) SPA - ваш друг

В первую очередь - ваши заявки Cordova должны принять SPA (Одностраничное приложение) дизайн. В широком смысле, SPA является клиентское приложение, которое запускается с одного запроса веб-страницы. Пользователь загружает начальный набор ресурсов (HTML, CSS и JavaScript) и дальнейшие обновления (показ нового представления, загрузка данных) осуществляется через AJAX. SPA обычно используются для более сложной клиентской стороны Приложения. GMail является отличным примером этого. После загрузки GMail, просмотр почты, редактирование и организация выполняются путем обновления DOM вместо того, чтобы фактически покинуть текущую страницу, чтобы загрузить совершенно новый один.

Да, вам может потребоваться написать больше кода, но вы все равно можете использовать несколько файлов JS для создания своих представлений на одной странице. Многостраничный подход также снижает производительность:

Даже если вы решите не использовать Cordova, создайте мобильное приложение без использования одностраничной архитектуры будет иметь серьезную производительность последствия. Это потому, что для навигации между страницами потребуется скрипты, ресурсы и т. д., которые необходимо перезагрузить. Даже если эти активы в кеше все равно будут проблемы с производительностью.

...