2013-06-13 26 views
5

Sto lavorando per creare un'app Android utilizzando Phonegap e AngularJS. Sto tentando di creare un pulsante da utilizzare sia come pulsante "cancella" che come pulsante "indietro", che in sostanza si limita a premere il pulsante "indietro" del browser.Pulsante back AngularJS

Ecco alcuni HTML di esempio per il pulsante Annulla:

<a href="#" ng-click="goBack()" class="button--cancel weight--bold vertical-align--middle text-center">cancel</a> 

E qui è il controller per quella pagina, con il tasto GoBack():

function NewOccasionCtrl($scope, $window) { 
    $scope.$window = $window; 
    $scope.goBack = function() { 
     $window.history.back(); 
    }; 
} 

Questo getta nessun errore, ma anche non funziona ... l'emulatore rimane sulla stessa pagina. Senza lo $scope.$window = $window si genera un errore. Speravo di ottenere un pulsante 'indietro' funzionale senza dover creare/utilizzare una direttiva, perché per quanto ne so, quindi implementare i modelli e le cose che non ho bisogno/voglio.

C'è un modo per farlo? Grazie

+1

Non ha senso che $ scope. $ Window = $ window sia richiesto. –

+0

@KarlZilles quindi probabilmente non è richiesto ... come ho detto, questo non funziona e sono un po 'confuso su come avvicinarsi a questo. – Jakemmarsh

risposta

10

Sono andato con l'utilizzo di una direttiva per rendere la funzionalità posteriore riutilizzabile. Qui è il mio codice finale:

HTML:

<a href back-button>back</a> 

Javascript:

app.directive('backButton', function(){ 
    return { 
     restrict: 'A', 

     link: function(scope, element, attrs) { 
     element.bind('click', goBack); 

     function goBack() { 
      history.back(); 
      scope.$apply(); 
     } 
     } 
    } 
}); 
+0

Quando uso questo codice ottengo un errore $ digest già in corso – PPPaul

+0

@PPPaul puoi provare ad usare la strategia discussa [qui] (http://stackoverflow.com/a/12859093/880859) per evitare quell'errore – Jakemmarsh

2

avevo un problema come questo con PhoneGap e angolare, $ window.history.back() non avrebbe funzionato . Così ho creato una soluzione alternativa.

$scope.urlHistory = []; 

$scope.$on('$routeChangeSuccess', function() { 
    if ($location.$$absUrl.split('#')[1] !== $scope.urlHistory[$scope.urlHistory.length - 1]) { 
     $scope.urlHistory.push($location.$$absUrl.split('#')[1]); 
    } 
}); 

$scope.goBack = function() { 
    $scope.urlHistory.pop(); 
    $location.path($scope.urlHistory[$scope.urlHistory.length - 1]); 
}; 

Spero che questo aiuti qualcun altro.

Problemi correlati