Cordova / Ionic window.location无法在wp8 / jquery上使用离子

时间:2016-03-29 09:20:28

标签: cordova jquery-mobile ionic-framework windows-phone angularjs-ng-click

编辑:

大编辑!!!毕竟问题不在于window.location,而是在设备准备好之前初始化了my_button_click函数。我身上的错误很大。 另外,我不得不更改div,它使用按钮响应ng-click以使其正常工作。



$ionicPlatform.ready(function() {
  $scope.my_button_click = function() {
    //...
    }
});

<button class="my_button" ng-click="my_button_click()"></button>
&#13;
&#13;
&#13;

原始问题:

我正在为所有平台开发一个cordova应用程序,它已经在Android和iOS上运行良好。

在Windows手机设备上构建和运行应用程序(编辑:Microsoft Lumia 640,Windows Phone 8.1。更新2),我遇到了一个问题。要从主屏幕导航到另一个屏幕,我使用了一个带有ng-click事件的按钮:

&#13;
&#13;
$scope.my_button_click = function () {
        window.location.href = "#/app/another_screen";
      };
&#13;
<div class="my_button" ng-click="my_button_click()">
&#13;
&#13;
&#13;

这适用于Android和iOS。但是,在Windows Phone 8.1上,当我第一次加载应用程序时,ng-click无效。但是,在通过应用程序进行一些随机的其他点击之后,该按钮将工作并重定向到另一个屏幕。 另一方面,第二个屏幕中的按钮(使用window.location重定向回主屏幕)根本不起作用。

On SO我发现了几个关于这个问题的问题,建议使用jquery mobile解决这个问题:

&#13;
&#13;
//window.location.href = "#/app/another_screen";
//replace with
$.mobile.navigate("#/app/another_screen");
&#13;
<script src="lib/jquery/jquery.min.js"></script>
<script src="lib/jquery.mobile-1.4.5/jquery.mobile-1.4.5.min.js"></script>
<script src="lib/ionic/js/ionic.bundle.js"></script>
&#13;
&#13;
&#13;

但离子和jquery移动似乎并没有合作,因为他们都有自己的方式来浏览应用程序。

是否有人遇到类似问题?

jquery真的是我的问题的答案,还是我在那里做错了?

window.location还有另一种解决方法,即在Windows平台上运行吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您没有进行真正的重定向,只是更改了窗口的源位置。这可能会导致某些事件无法触发,导致手机上的webview未注意到更改。

最佳做法是使用$state.go方法。

假设您已定义以下状态:

    .state('app', {
        url: '/app',
        abstract: true,
        templateUrl: 'templates/menu.html',
        controller: 'AppCtrl'
    })

    .state('app.loading', {
        url: '/loading',
        views: {
            'menuContent': {
                templateUrl: 'templates/loading.html',
                controller: 'LoadingCtrl'
            }
        }
    })

    .state('app.stages', {
        url: '/stages',
        views: {
            'menuContent': {
                templateUrl: 'templates/stages.html',
                controller: 'StagesCtrl'
            }
        }
    })

然后$state.go('app.stages');会让您的应用转到templates/stages.html页面。

相关问题