【发布时间】:2017-11-08 15:40:22
【问题描述】:
我在我的网页中使用 angularjs 单页应用程序,
以下是 spa 构造函数的代码
app.config(config);
config.$inject = ['$stateProvider','$urlRouterProvider'];
function config($stateProvider,$urlRouterProvider){
$stateProvider.state('dashboard',{
url:'/{userID}/{testID}',
templateUrl:'templates/dashboard.html',
controller:'dashboardCtrl'
});
}
模板dashboard.html 显示谷歌图形和图表的数量。
在控制器dashboardCtrl 中,我使用$http 指令向服务器发出GET/POST 请求,并使用响应数据绘制谷歌图表。
以下是服务代码($http 请求)
app.service('getGraphData',getGraphData);
getGraphData.$inject = ['$http'];
function getGraphData($http){
var obj = this;
obj.getLatestData = function(testID){
return $http({
method:'GET',
url:'/rest/getGraphDataForTestID',
params:{testID:testID}
}
).then(function(response){
// success response
return(response.data);
});
}
return obj;
}
控制器代码 -
app.controller('dashboardCtrl',dashboardCtrl);
dashboardCtrl.$inject = ['$scope','$rootScope','getGraphData','$stateParams'];
function dashboardCtrl($scope,$rootScope,getGraphData,$stateParams){
var testID = $stateParams.testID;
var userID = $stateParams.userID;
var graphData = null;
getGraphData.getLatestData(testID).then(function(response){
$scope.testname = response.data.testname;
$scope.tag = response.data.tag;
..
..
$scope.results = response.data;
graphData = response.data;
drawBarChart(graphData);
drawPieChart(graphData);
});
}
我的索引页中有很多链接,如下所示
<a ui-sref = "dashboard({userID:1,testID:197})"><b>dashboard-userid:1,graphs:197</b></a>
<a ui-sref = "dashboard({userID:1,testID:198})"><b>dashboard-userid:1,graphs:198</b></a>
此设置在一段时间内运行良好,但一段时间后我收到浏览器错误消息“浏览器内存不足,无法显示此网页”
也许是因为 angularjs 正在保存以前的 $scope 和 $rootScope 变量,并且在重新加载模板时还会创建新变量...
或者只是 JavaScript 变量没有被删除......
(但我没有使用全局变量——所有变量都在控制器函数中声明,应该与该函数具有相同的生命)
我如何清除/刷新这些 $scope/$rootScope 变量并释放内存...
我如何分析我的特定页面的内存使用情况..??
请帮忙...
【问题讨论】:
标签: javascript angularjs memory