$ location.path登录后无法在iOS上运行

时间:2016-01-20 08:50:19

标签: angularjs ionic-framework

开发我的第一个Ionic应用程序。在浏览器中本地测试一切正常,但是当我在我的iOS设备(v9.2.1)上测试时,$ location.path(...)似乎不起作用,页面/状态保持原样。

流程是: 1.用户在表单中输入登录详细信息 2.使用我的外部API验证用户 3.成功响应注册设备以进行推送 4.用户被定向到主应用页面

我在每一步都收到控制台日志,所以我可以看到一切正常,直到那一点。我在控制台中没有任何错误(查看xcode和safari)。

代码(我已删除了一些电子邮件的表单验证,密码检查以简化):

.controller('LoginController', function($scope, $http, $state, $ionicPopup, $localstorage, $location, $ionicLoading, $ionicPush, $timeout) {
$scope.data = {};

$http.post(api_path+'validateUser', JSON.stringify({key: 'xxx', email: $scope.data.email, password: $scope.data.password})).success(function(data) {
    $ionicLoading.show();
    console.log(data);
    if (data.result === 1) {
        console.log('successfully logged in');
        if ($localstorage.get('storage_user_id') !== data.user_data.id) {
            $localstorage.clear();
            console.log('clearing storage');
        }
        $localstorage.set('storage_user_id', data.user_data.id);
        $localstorage.setObject('user_data', data.user_data);
        $ionicLoading.hide();

        if (!registeredPush) {
            registeredPush = true;
            $ionicPush.register();
            console.log('registering push');
        }

        console.log(data.user_data.signature);
        if (data.user_data.signature === '') {
            console.log('Going to signatures page');
            $location.path('/save-signature');
        } else {
            console.log('Going to buildings page');
            $location.path('/app/buildings');
        }
    }
});

我尝试过使用: $ state.go(...); $ scope.apply等。

离子信息:

Your system information:

Cordova CLI: 5.3.3
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.0
Ionic Version: 1.1.0
Ionic CLI Version: 1.7.12
Ionic App Lib Version: 0.6.5
ios-deploy version: 1.8.4 
ios-sim version: 5.0.4 
OS: Mac OS X El Capitan
Node Version: v0.12.2
Xcode version: Xcode 7.2 Build version 7C68

感谢。

1 个答案:

答案 0 :(得分:0)

感谢Hisham Abdel-Hafez,你的评论让我走上正确的道路来解决这个问题。

正如他所提到的,在插件准备好之前调用了$ ionicPlatform.ready()方法。我在xcode输出中注意到这一点,我从来没有得到输出离子核心:插件准备就绪,除非我删除了我的准备功能(键盘和状态栏设置)中的所有内容,并删除了 $ urlRouterProvider.otherwise 为默认页面。

当我尝试注册推送时,位置路径无法正常工作的原因是因为一切都在插件实际准备就绪之前发生,我想这会导致JS错误停止我的应用。

现在我接触到的是我的主应用程序控制器只在我的登录页面控制器之后被调用,所以我仍然需要优化我的代码并获得Angular和Ionic的挂起。