当使用AngularJS和Angular Material时,可能会遇到返回按钮执行两次的问题。这通常是因为使用了$location
服务的$back
方法,而$back
方法在返回之前会调用$rootScope
的$apply
方法,触发了一次额外的脏检查。
以下是解决这个问题的一种方法:
$location
和$rootScope
:app.controller('YourController', function($scope, $location, $rootScope) {
// 控制器代码
});
$applyAsync
方法来延迟触发脏检查:$rootScope.goBack = function() {
$rootScope.$applyAsync(function() {
$location.path('/previous-page');
});
};
通过使用$applyAsync
,脏检查将在该事件循环的末尾触发,这避免了多余的脏检查。
这样,点击返回按钮时将只触发一次脏检查,解决了执行两次的问题。
注意:如果你使用的是Angular 1.6版本或更高版本,则可以使用$locationChangeStart
事件来监听路由的变化,并在事件回调函数中避免多余的脏检查。