обработка кнопки возврата в ионном для веб-просмотра - PullRequest
0 голосов
/ 03 декабря 2018

Я пытался обработать кнопку назад в ионном для просмотра в Интернете

, для этого я использовал navcontoller для навигации в ионном приложении

, где я нахожусьполучая ошибку, которую я упомянул ниже при использовании navcontrol

 MyApp_Host.ngfactory.js? [sm]:1 ERROR Error: StaticInjectorError(AppModule)[Nav -> NavController]: 
   StaticInjectorError(Platform: core)[Nav -> NavController]:
     NullInjectorError: No provider for NavController!
     at _NullInjector.get (core.js:1003)
     at resolveToken (core.js:1301)
     at tryResolveToken (core.js:1243)
     at StaticInjector.get (core.js:1111)
     at resolveToken (core.js:1301)
     at tryResolveToken (core.js:1243)
     at StaticInjector.get (core.js:1111)
     at resolveNgModuleDep (core.js:10896)
     at NgModuleRef_.get (core.js:12129)
     at resolveDep (core.js:12619)

Я помещаю код TS, который я добавил на своем сайте, и я получаю сообщение об ошибке.Я определил navCtrl в конструкторе для navcontoller и использовал его на window.onpopstate

 window.onpopstate = function(event) {
    //alert('onpop');
    console.log(event);
    console.log('location: ' + document.location + ', state: ' + JSON.stringify(event.state));
    let str = event.target;
    console.log('Hash-----' + document.location.hash)
    let location:Array<String> = document.location.hash.split('/');
    console.log(window.location);
    //let url = document.location.toString();
    //console.log(url);
    //window.location.replace(url);
    console.log(location);
    console.log(location[1]);
    if (location[1] == "createTeam") {
        storage.get('team').then(val => {
            console.log("players-----------------------------")
            console.log(val);
            //console.log(val.length);
            if (val!= null) {
                let alert = alertCtrl.create({
                    title: "ALERT",
                    message: "Do you want to delete this team",
                    buttons: [
                        {
                            text: "Cancel",
                            role: "cancel",
                            handler: () => {
                                console.log("Cancel clicked");
                            }
                        },
                        {
                            text: "Ok",
                            handler: () => {
                                console.log("Ok clicked");
                                storage.remove("team");
                                navCtrl.pop();
                            }
                        }   
                    ]
                });
                alert.present();
            }
            else{
                navCtrl.pop();
            }
        });
    }
    else if(location[1] == "error"){
        alert('back error page');
        navCtrl.pop().then(()=>{
            navCtrl.push('MatchcenterPage');
        })
    } else {
        navCtrl.pop();
    }
    console.log(str);
};

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете подписаться на навигацию:

this._app.viewDidEnter.subscribe(x => {
    // your magic here
});

Лучшая практика, я думаю:

  1. Создайте провайдера навигации, потому что он будет одиночным и сохранит состояние, выигралне приведет к утечке памяти.
  2. Подпишитесь на навигацию и творите чудеса.
...