2013-06-13 12 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

このコードを使用すると、すでに進行中の$ダイジェストエラーが発生する – 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]); 
}; 

これは他の人に役立つことを望みます。