如何在angular.js中实现history.back()

我有指令,这是网站标题与后退button,我想单击返回到上一页。 我如何以angular度的方式做到这一点?

我努力了:

<header class="title"> <a class="back" ng-class="icons"><img src="../media/icons/right_circular.png" ng-click="history.back()" /></a> <h1>{{title}}</h1> <a href="/home" class="home" ng-class="icons"><img src="../media/icons/53-house.png" /></a> </header> 

这是js的指令:

 myApp.directive('siteHeader', function () { return { restrict: 'E', templateUrl: 'partials/siteHeader.html', scope: { title: '@title', icons: '@icons' } }; }); 

但没有任何反应。 我查看了有关$ location的angular.js API,但没有发现有关后退button或history.back()任何信息。

您需要在您的指令中使用链接function:

 link: function(scope, element, attrs) { element.on('click', function() { $window.history.back(); }); } 

见jsFiddle 。

angular度路线监视浏览器的位置,所以只需使用window.history.back()点击一下就行了。

HTML:

 <div class="nav-header" ng-click="doTheBack()">Reverse!</div> 

JS:

 $scope.doTheBack = function() { window.history.back(); }; 

我通常在我的应用程序控制器上创build一个名为“$ back”的全局函数,我通常将它放在body标签上。

 angular.module('myApp').controller('AppCtrl', ['$scope', function($scope) { $scope.$back = function() { window.history.back(); }; }]); 

然后,在我的应用程序的任何地方,我只能做<a ng-click="$back()">Back</a>

(如果你希望它是更可testing的,注入$窗口服务到你的控制器,并使用$window.history.back() )。

理想情况下,使用一个简单的指令来使控制器免于多余的$窗口

 app.directive('back', ['$window', function($window) { return { restrict: 'A', link: function (scope, elem, attrs) { elem.bind('click', function () { $window.history.back(); }); } }; }]); 

像这样使用:

 <button back>Back</button> 

另一个很好的和可重用的解决scheme是创build一个像这样的指令:

 app.directive( 'backButton', function() { return { restrict: 'A', link: function( scope, element, attrs ) { element.on( 'click', function () { history.back(); scope.$apply(); } ); } }; } ); 

那么就像这样使用它:

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

如果它有用…我正在打到“10 $ digest()迭代到达。中止! 使用$ window.history.back()时出错; 与IE9(当然在其他浏览器中工作)。

我通过使用:

 setTimeout(function() { $window.history.back(); },100); 

或者你可以简单地使用JavaScript代码

的onClick = “JavaScript的:history.go(-1);”

喜欢

 <a class="back" ng-class="icons"><img src="../media/icons/right_circular.png" onClick="javascript:history.go(-1);" /></a> 

有一个语法错误。 试试这个,它应该工作:

 directives.directive('backButton', function(){ return { restrict: 'A', link: function(scope, element, attrs) { element.bind('click', function () { history.back(); scope.$apply(); }); } } }); 

对我来说,我的问题是我需要导航回来,然后转移到另一个国家。 所以使用$window.history.back()没有工作,因为由于某种原因,转换发生在history.back()发生之前,所以我不得不把我的转变包装在超时function,如此。

 $window.history.back(); setTimeout(function() { $state.transitionTo("tab.jobs"); }, 100); 

这解决了我的问题。

在AngularJS2中,我发现了一种新的方式,也许是同样的东西,但在这个新版本中:

 import {Router, RouteConfig, ROUTER_DIRECTIVES, Location} from 'angular2/router'; (...) constructor(private _router: Router, private _location: Location) {} onSubmit() { (...) self._location.back(); } 

在我的function之后,我可以看到我的应用程序正在从angular2 / router进入前一页的位置。

https://angular.io/docs/ts/latest/api/common/index/Location-class.html

angular度4:

 /* typescript */ import { Location } from '@angular/common'; // ... @Component({ // ... }) export class MyComponent { constructor(private location: Location) { } goBack() { this.location.back(); // go back to previous location } }