Cordova angular app on hardware back按钮按下,打开上次打开的视图
最初,我看到的是“A”,然后我从api加载了一些东西。现在,当点击按钮时,我移到视图“B”,然后当点击后退按钮(硬件/导航栏后退按钮)时,我移回视图A,但视图A的内容已经被破坏,只有简单视图被加载Cordova angular app on hardware back按钮按下,打开上次打开的视图,cordova,ngcordova,Cordova,Ngcordova,最初,我看到的是“A”,然后我从api加载了一些东西。现在,当点击按钮时,我移到视图“B”,然后当点击后退按钮(硬件/导航栏后退按钮)时,我移回视图A,但视图A的内容已经被破坏,只有简单视图被加载 window.history.back(); 因此,我想出了一种方法,即在每次加载视图时,我都将其添加到本地存储状态数组中。当按下back键时,我返回到以前的状态 this.router.navigate([previousState]); 但这只在导航栏按钮点击时起作用。在硬按钮单击时,我被导航
window.history.back();
因此,我想出了一种方法,即在每次加载视图时,我都将其添加到本地存储状态数组中。当按下back键时,我返回到以前的状态
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]);
}
可视示例:
但是,当导航栏返回按钮单击时,从B到A可以正常工作
可能是什么问题?您正在尝试解决一个由您自己造成的问题。首先,您不应在同一Cordova应用程序上创建多个页面 这是第一个原则: 1) SPA是你的朋友 首先,您的Cordova应用程序应采用SPA (单页应用)设计。从广义上讲,SPA是一种 从网页的一个请求运行的客户端应用程序。 用户加载一组初始资源(HTML、CSS和JavaScript) 进一步的更新(显示新视图、加载数据)通过 AJAXSPA通常用于更复杂的客户端 应用。GMail就是一个很好的例子。加载GMail后, 邮件视图、编辑和组织都是通过更新DOM来完成的 而不是离开当前页面来加载一个全新的 一个 是的,您可能需要编写更多的代码,但仍然可以使用多个JS文件在单个页面中创建视图。多页方法还具有性能惩罚: 即使您选择不使用Cordova,也要创建一个移动应用程序 如果不使用单页架构,将有严重的性能问题 启示。这是因为在页面之间导航需要 要重新加载的脚本、资产等。即使这些资产 缓存后,仍将存在性能问题