代码之家  ›  专栏  ›  技术社区  ›  Ashwin Shrestha

Cordova angular应用程序上的硬件后退按钮按下,打开上次打开的视图

  •  0
  • Ashwin Shrestha  · 技术社区  · 8 年前

    window.history.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]);
    
    }
    

    When view gets loaded first time

    navigate from A to B

    Clicking hardware back button B to A

    不过,当导航栏后退按钮单击时,从B到A工作正常 有什么问题吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   andreszs    8 年前

    你在试图解决一个由你一个人创造的问题。首先,不应在同一个Cordova应用程序上创建多个页面。

    这是第一个 Best Practices Cordova app development

    斯帕是你的朋友

    首先,您的Cordova应用程序应采用SPA (单页应用程序)设计。广义地说,SPA是 进一步的更新(显示新视图、加载数据)通过 阿贾克斯。spa通常用于更复杂的客户端 邮件视图、编辑和组织都是通过更新DOM来完成的

    是的,您可能需要编写更多代码,但您仍然可以使用多个JS文件在单个页面中创建视图。多页方法还具有性能惩罚功能:

    不使用单页体系结构将有严重的性能 启示。这是因为在页面之间导航需要