我的指令是带有后退按钮的站点标题,我想点击返回上一页。我如何以有角度的方式做到这一点?
我试过了:
<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但没有找到关于后退按钮或history.back()
的任何信息。
答案 0 :(得分:256)
您需要在指令中使用链接功能:
link: function(scope, element, attrs) {
element.on('click', function() {
$window.history.back();
});
}
请参阅jsFiddle。
答案 1 :(得分:129)
Angular路线会观察浏览器的位置,因此只需使用window.history.back()
点击某些内容即可。
HTML:
<div class="nav-header" ng-click="doTheBack()">Reverse!</div>
JS:
$scope.doTheBack = function() {
window.history.back();
};
我通常在我的应用程序控制器上创建一个名为'$ back'的全局函数,我通常将其放在body标签上。
angular.module('myApp').controller('AppCtrl', ['$scope', function($scope) {
$scope.$back = function() {
window.history.back();
};
}]);
然后在我的应用中的任何地方我都可以<a ng-click="$back()">Back</a>
(如果您希望它更易于测试,请将$ window服务注入您的控制器并使用$window.history.back()
)。
答案 2 :(得分:65)
理想情况下,使用简单的指令使控制器不受冗余$ window
的影响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>
答案 3 :(得分:20)
另一个不错且可重复使用的解决方案是创建一个类似this的指令:
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>
答案 4 :(得分:18)
如果它有用......我正在达到“10 $ digest()迭代次数。中止!”使用$ window.history.back()时出错使用IE9(当然在其他浏览器中工作正常)。
我使用以下方式开始工作:
setTimeout(function() {
$window.history.back();
},100);
答案 5 :(得分:3)
或者您只需使用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>
答案 6 :(得分:1)
出现语法错误。试试这个它应该有效:
directives.directive('backButton', function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function () {
history.back();
scope.$apply();
});
}
}
});
答案 7 :(得分:1)
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
}
}
答案 8 :(得分:0)
对我来说,我的问题是我需要向后导航然后转换到另一个州。所以使用$window.history.back()
不起作用,因为由于某种原因转换发生在history.back()之前,所以我不得不将转换包装在一个超时函数中,如此。
$window.history.back();
setTimeout(function() {
$state.transitionTo("tab.jobs"); }, 100);
这解决了我的问题。
答案 9 :(得分:0)
在AngularJS2中,我发现了一种新的方式,可能只是在同一个东西,但在这个新版本中:
import {Router, RouteConfig, ROUTER_DIRECTIVES, Location} from 'angular2/router';
(...)
constructor(private _router: Router, private _location: Location) {}
onSubmit() {
(...)
self._location.back();
}
在我的功能之后,我可以看到我的应用程序将从angular2 / router转到上一页的usgin位置。
https://angular.io/docs/ts/latest/api/common/index/Location-class.html