如何在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 } }