$scope.ons.navigator.pushPage не работает в методе инициализации

Я следую функции инициализации в app.js

$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.
                });         
            }
        },

и я огонь init от

<body ng-controller="AppController" ng-init="init()">

Я хочу, чтобы это понравилось, если я вхожу в систему в первый раз, тогда мне нужно войти в систему, и я сохраняю идентификатор и передаю в локальное хранилище, и каждый раз, когда приложение загружается, а метод инициализации является огнем, и я проверяю идентификатор и перехожу из локального хранилища и метод пожарного сервера для проверки id и пройти, если его правильный вход в систему выполняется автоматически.

Я использую phonegap + onsenui + angular js.

Проблема связана с методом init

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

не перенаправляется на дашборад.


person Community    schedule 05.10.2014    source источник


Ответы (1)


В $scope.ons.navigator.pushPage('dashboard.html',{title : 'title'}); нет ничего плохого. Но я думаю, что внутри вашего тега <body> нет тега <ons-navigator>, который необходим для использования этой функции. Кроме того, вам нужно вызвать функцию внутри 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>
person khemry    schedule 06.10.2014
comment
Спасибо за ответ. Но init() вызывается, и значение успешно получено из локального хранилища, но страница не перенаправляется на панель инструментов.html - person ; 06.10.2014
comment
@PareshGami Я думаю, это из-за обещания внутри вашего http-сервиса. Я рекомендую получать ваши данные http через службу, как я обновил в своем ответе. Затем введите его в свой контроллер. На этот раз должно сработать. Удачи. - person khemry; 07.10.2014
comment
Спасибо. Вы меняете app.factory правильно? но можете ли вы объяснить мне, как это работает и как звонить из init. - person ; 07.10.2014