2013-06-13 37 views
5

我正在製作使用的PhoneGap和AngularJS的Android應用程序。我試圖創建一個用作「取消」和「後退」按鈕的按鈕,該按鈕實際上只是點擊瀏覽器的「後退」按鈕。AngularJS備份按鈕

下面是取消按鈕一些樣本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]); 
}; 

希望這有助於別人。