2013-06-13 5 views
5

Ich arbeite an einer Android App mit Phonegap und AngularJS. Ich versuche, eine Schaltfläche zu erstellen, die sowohl als "Abbrechen" - als auch als "Zurück" -Schaltfläche verwendet werden kann und im Wesentlichen nur die Schaltfläche "Zurück" des Browsers drücken wird.AngularJS Zurück-Taste

Hier einiger Beispiel-HTML für die Abbrechen-Taste:

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

Und hier ist der Controller für die Seite, mit der goBack() Taste:

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

Dies keinen Fehler wirft, sondern auch funktioniert nicht ... der Emulator bleibt auf der gleichen Seite. Ohne $scope.$window = $window wird ein Fehler ausgegeben. Ich hatte gehofft, einen funktionalen "Zurück" -Knopf zu erreichen, ohne eine Direktive erstellen/verwenden zu müssen, denn soweit ich das verstehe, implementieren sie dann Templating und Dinge, die ich nicht brauche.

Gibt es eine Möglichkeit, dies zu tun? Danke

+1

Es macht keinen Sinn, dass $ scope. $ Window = $ window benötigt wird. –

+0

@KarlZilles dann ist es wahrscheinlich nicht erforderlich ... wie ich schon sagte, das funktioniert nicht und ich bin ein wenig verwirrt darüber, wie ich das angehen soll. – Jakemmarsh

Antwort

10

Ich ging mit einer Richtlinie, um die Rückfunktionalität wiederverwendbar zu machen. Hier ist mein letzter Code:

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

Wenn ich diesen Code verwende, bekomme ich einen '$ Digest in progress' Fehler – PPPaul

+0

@PPPaul Sie können versuchen, die Strategie [hier] (http://stackoverflow.com/a/12859093/880859) zu verwenden, um diesen Fehler zu vermeiden – Jakemmarsh

2

Ich hatte ein Problem wie dieses mit phonegap und eckig, $ window.history.back() nicht funktionieren würde, . Also habe ich einen Workaround erstellt.

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

Hoffnung diese Hilfe jemand anderes.