我是JavaScript的新手,所以我不确定什么是可能的。我使用AngularJS作为我的前端应用程序。 我有一个可点击的表(行),它几乎就是表格内的表格(可折叠表格)
如果数据可用,我试图点击表格的第一行,所以我写了这个函数
$scope.clicker = function(){
if (!$scope.first || !$scope.second){
setTimeout($scope.clicker, 500)
}
$(".clickableRow").first().click()
}
这几乎检查第一个和第二个值是否为空,如果不是,则单击第一行。这有时会工作,但几乎每次我都会收到此错误“
Error: [$rootScope:inprog] $digest already in progress
http://errors.angularjs.org/1.4.3/ $ rootScope / inprog?P0 =%24digest
我不确定这意味着什么。任何帮助都会很好。
答案 0 :(得分:0)
使用$q.all
,您可以在数组中传递多个$http
个请求。
您可以在.then
方法上使用q.all()
,并在完成后收到回电。
$scope.$watch(
function() {
return $route.current;
},
function(newValue) {
if (newValue) {
$scope.url = newValue.$$route.originalPath;
if($scope.url == '/loadTestForm') return;
$scope.neustaridParam = newValue.params.neustarid;
$q.all([
$http.get('/corecase/browserKPI/'+$scope.neustaridParam).success(function(response){
$scope.browserKPI = response;
}),
$http.get('/corecase/serverKPI/'+$scope.neustaridParam).success(function(response){
$scope.serverKPI = response;
}),
$http.get('/corecase/info/'+$scope.neustaridParam).success(function(response){
$scope.corecaseinfo = response;
})
]).then(function(){
$scope.selectTableRow(0, 1000); //I'd advise not hardcoding the first row's data here. You can do something like this instead: $scope.storeDataModel.storedata[0].id, scope.storeDataModel.storedata[0].storeId
});
}
}
);
答案 1 :(得分:0)
如果click事件背后的唯一目的是显示或隐藏,那么您可以一起跳过click事件。在您的tr(或您想要显示的任何其他元素)中放置一个“ng-show”,并简单地设置一个范围变量等于引用您的数据的任何内容。如果你有数据,那么你的ng-show将是真的,它会显示出来。这也假设您的数据未定义或为空,直到它可用,如果不是仅将其设置为false。
In view:
<tr ng-show="checkData"></tr>
In controller:
$scope.checkData = data;