【问题标题】:$scope.ons.navigator.pushPage not work in init method$scope.ons.navigator.pushPage 在 init 方法中不起作用
【发布时间】:2014-10-31 19:57:50
【问题描述】:

我正在关注 app.js 中的 init 函数

$scope.init = function () 
        {
            if(localStorage.getItem("id")!=null && localStorage.getItem("pass")!=null)
            {
                alert(localStorage.getItem("id")+" "+localStorage.getItem("pass")); 
                var id=localStorage.getItem("id");
                var pass=localStorage.getItem("pass");              
                $http({method: 'GET', url: site+'/login-web.php?txt_email='+id+'&txt_password='+pass}).
                success(function(data, status, headers, config) 
                {
                    if(data=='error')
                        navigator.notification.alert("Wrong username or password.",null,"Attention.!","Try Again.!");
                    else
                    {
                        localStorage.setItem("id", id);
                        localStorage.setItem("pass", password);
                        alert("fire");
                        $scope.ons.navigator.pushPage('dashboard.html',{title : 'title'});
                    }

                }).
                error(function(data, status, headers, config) 
                {
                    alert("Please check Mobile Data.");
                    // called asynchronously if an error occurs
                    // or server returns response with an error status.
                });         
            }
        },

我是来自

的火初始化
<body ng-controller="AppController" ng-init="init()">

如果我第一次登录,我想喜欢这个,然后我需要登录,我存储 id 并传入 localstorage,每次加载应用程序和 init 方法时,我检查 id 并从 localstorage 和火服务器传递方法来检查 id 并在其正确登录是否自动完成时通过。

我正在使用 phonegap + onsenui + angular js。

问题出在init方法

$scope.ons.navigator.pushPage('dashboard.html',{title : 'title'});

没有重定向到仪表板。

【问题讨论】:

    标签: angularjs cordova onsen-ui


    【解决方案1】:

    $scope.ons.navigator.pushPage('dashboard.html',{title : 'title'}); 没有任何问题。但我认为在您的 &lt;body&gt; 标签内,没有 &lt;ons-navigator&gt; 标签才能使用该功能。此外,您需要在 setTimeout 中调用该函数,否则它将在 DOM 元素完成渲染之前被调用。执行以下操作:

    这是您需要添加到您的控制器的内容:

    app.factory('DataService', function($http) {
        var service = {
            requestData: function(url) {
                return $http.get(url).then(function(data, status, headers, config) {
                    service.myData = data;
                    return service.myData;
                });
            },
            myData: null,
        return service;
    });
    
    app.controller('AppController', function($scope, DataService)){
        $scope.init = function(){ setTimeout($scope.init_wait, 10); };
    
        $scope.init_wait = function () {
            if(localStorage.getItem("id")!=null && localStorage.getItem("pass")!=null){
                alert(localStorage.getItem("id")+" "+localStorage.getItem("pass")); 
                var id=localStorage.getItem("id");
                var pass=localStorage.getItem("pass"); 
                var url = ite+'/login-web.php?txt_email='+id+'&txt_password='+pass;
    
                DataService.requestData(url).then(function(data, status, headers, config) {
                    if(data=='error')
                        navigator.notification.alert("Wrong username or password.",null,"Attention.!","Try Again.!");
                    else {
                        localStorage.setItem("id", id);
                        localStorage.setItem("pass", password);
                        alert("fire");
                        $scope.ons.navigator.pushPage('dashboard.html',{title : 'title'});
                    }
                });      
            }
        }
    };
    

    在您的 HTML 中

    <body ng-controller="AppController" ng-init="init()">
      <ons-navigator>
        <!--Your HTML-->
      </ons-navigator>
    </body>
    

    【讨论】:

    • 感谢您的回复。但是 init() 被调用并成功从 localstorage 获取值,但页面没有重定向到 dashboard.html
    • @PareshGami 我认为这是因为您的 http 服务中的承诺。我建议通过服务获取您的 http 数据,因为我在回答中进行了更新。然后将其注入您的控制器。这次应该可以了。祝你好运。
    • 谢谢。您正在更改 app.factory 对吗?但你能解释一下它的工作原理和从 init 调用的方式吗?
    猜你喜欢
    • 2012-10-04
    • 2020-04-11
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多