我不知道如何解决这个当前的问题。我在一个页面上有 5 个标签。每个选项卡通过路由和 ng-view 加载一个新页面和控制器。我在每个选项卡上都有一个 $locationChangeStart 来完成一些功能,然后再转到下一个选项卡。但是,如果用户返回到上一个选项卡,那么我们会遇到一些问题。在完成他们对选项卡所做的任何事情并切换到另一个之后, $locationChangeStart 函数将被多次触发,似乎每次从原始选项卡切换选项卡都会创建一个新控制器。
所以:
- 当前选项卡 = A
- 切换到新标签 (B)
- $locationChangeStart 按预期触发
- 切换回选项卡 A
- $locationChangeStart 再次为选项卡 A 触发(没想到,因为我不再在该页面上,但没关系)
- 切换到新标签 (C)
- 2 $locationChangeStart 火灾。一个具有新范围,另一个在第一次访问选项卡时具有原始范围。
当从 Tab A 切换到 a 时,这个过程会发生无数次,每次调用的数量都会增加 1。
plunker:工作演示
索引.html:
<div ng-controller="visitController">
<h3>ng-view demo</h3>
<ul class="nav nav-tabs">
<li class="active">
<a href="#/Information">Information</a>
</li>
<li><a href="#/Fingerprint">Fingerprint</a></li>
<li><a href="#/Agenda">Agenda</a></li>
<li><a href="#/Logistics">Logistics</a></li>
</ul>
<div ng-view>
</div>
</div>
表 1:
<div ng-controller="InformationController">
This is the information tab.
</div>
选项卡 2:
<div>
This is the Fingerprint tab.
</div>
主页面js:
angular.module('app', []).config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider.when('', {
templateUrl: "Information.html",
controller: visitController
}).when('/Information', {
templateUrl: "Information.html",
controller: visitController
}).when('/Fingerprint', {
templateUrl: "Fingerprint.html",
controller: visitController
})
$routeProvider
.otherwise('/Information', {
redirectTo: "Information.html"
});
}
]);
function visitController($scope, $http, $window, $route, $rootScope) {
}
选项卡 1 JS
function InformationController($scope, $http, $window, $route, $rootScope) {
$scope.activated = 0;
$rootScope.$on('$locationChangeStart', function (event) {
$scope.activated++;
alert($scope.activated);
});
}