В моем примере ниже вы можете видеть, что каждый раз, когда вы переходите на страницу, новый экземпляр того же контроллера создается с другим идентификатором, а старый не уничтожается, Метод setIntervat сохраняет все соответствующие идентификаторы области и имени фрукта. Предположим, у меня есть вызов ajax вместо журнала, который время от времени обновляет содержимое страницы, но я не хочу делать вызовы для неактивных страниц, как я могу это исправить?Созданы угловые множественные экземпляры одного и того же контроллера
var app = angular.module('plunker', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/fruit/:fruitId', {
templateUrl: 'fruit-tpl.html',
controller: 'FruitController'
})
.otherwise({
redirectTo: '/fruit/1'
});
}]);
app.controller('FruitController', ['$scope', '$routeParams',
function($scope, $routeParams) {
var fruitArr = ['Lemons', 'Oranges', 'Grapefruit'],
fruitId = $routeParams.fruitId - 1;
$scope.fruitName = fruitArr[fruitId];
setInterval(function() {
console.log('scope', $scope.$id, $scope.fruitName);
}, 3000);
}
]);
не setInterval уезжает, конечно, потому что вы не остановить его. и, пока вы не остановите его, переменные, которые он использует, не могут быть собраны в мусор. –