2013-06-13 2 views
5

Я работаю над созданием приложения для Android с помощью Phonegap и AngularJS. Я пытаюсь создать кнопку, которая будет использоваться как кнопка «отменить» и «назад», которая по сути просто ударит по кнопке «назад» браузера.AngularJS back button

Вот некоторые примеры HTML для кнопки отмены:

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

А вот контроллер для этой страницы, с помощью кнопки GoBack():

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

Это приводит к возникновению ошибок, но и не работает ... эмулятор остается на одной странице. Без $scope.$window = $window он выдает сообщение об ошибке. Я надеялся создать функциональную кнопку «назад», не создавая/не используя директиву, потому что, насколько я понимаю, они применяют шаблоны и вещи, которые мне не нужны/не нужны.

Есть ли способ сделать это? Спасибо

+1

Не имеет значения, что $ scope потребуется $ window = $ window. –

+0

@ KarlZilles, тогда это, вероятно, не требуется ... как я уже сказал, это не работает, и я немного смущен относительно того, как подойти к этому. – Jakemmarsh

ответ

10

Я пошел с использованием Директивы, чтобы сделать обратную функциональность многоразовой. Вот мой окончательный код:

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

Когда я использую этот код, я получаю ошибку «$ digest уже в процессе» – PPPaul

+0

@PPPaul, вы можете попробовать использовать обсуждаемую стратегию [здесь] (http://stackoverflow.com/a/12859093/880859), чтобы избежать этой ошибки – Jakemmarsh

2

я вопрос, как это с помощью PhoneGap и углового, $ window.history.back() не будет работать , Поэтому я создал обходное решение.

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

Надеюсь, что это поможет кому-то еще.