この現在の問題を解決する方法がわかりません。ページに 5 つのタブがあります。各タブは、ルーティングと ng-view を介して新しいページとコントローラーをロードします。次のタブに移動する前に、いくつかの機能を完了するために、各タブに $locationChangeStart があります。ただし、ユーザーが前のタブに戻ると、いくつかの問題が発生します。タブで行うことをすべて終了して別のタブに切り替えると、 $locationChangeStart 関数が何度も起動されます。元のタブからタブを切り替えるたびに、新しいコントローラーが作成されているようです。
それで:
- 現在のタブ = A
- 新しいタブに切り替える (B)
- $locationChangeStart は期待どおりに起動します
- タブ A に戻る
- $locationChangeStart が再びタブ A に対して発生します (私はもうそのページにいないので予期していませんでしたが、大丈夫です)
- 新しいタブに切り替える (C)
- 2 $locationChangeStart 火災。1 つは新しいスコープ、もう 1 つは最初にタブにアクセスしたときの元のスコープです。
このプロセスは、タブ A から に切り替えると無限に発生し、呼び出し回数は毎回 1 ずつ増えます。
plunker:動作デモ
index.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);
});
}