【发布时间】:2015-09-05 12:13:00
【问题描述】:
在下面的示例中,您可以看到每次访问页面时,都会使用不同的 id 创建同一控制器的新实例,而旧实例不会被销毁,setIntervat 方法会持续记录相应的范围 id 和所有的水果名称。假设我有一个 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 不会消失当然是因为你没有阻止它。而且,在你停止它之前,它使用的变量不能被垃圾回收。
标签: angularjs controller scope ngroute ng-view