角度ng-click适用于第二次单击

时间:2016-07-08 11:33:00

标签: angularjs bootstrap-modal angularjs-ng-click

我正在使用ng-click打开模态并调用func:

<a class="btn btn-info" data-toggle="modal" data-target="#editWorkerModal" ng-click="workerInfo(worker.id); professionsInfo()"> 
    <i class="glyphicon glyphicon-edit white"></i>
</a> 

现在模态已打开,professionsInfo()函数已运行,但在我第一次点击它时效果不佳。

这是professionInfo() func:

$scope.professionsInfo = function () {
    $http({
        url: '/SafetyManager/professions',
        method: "GET",
    }).success(function (response) {
        $scope.professions = response;
        for(var i = 0, len1=$scope.info.professions.length; i<len1; i++) {
            for(var n=0, len2=$scope.professions.length; n<len2; n++) {
                if($scope.info.professions[i].id == $scope.professions[n].id)
                    $scope.professions[n].disabled = true;
            }
        }       
    });
};

func从服务器返回正确的数据,并在$scope.professions上更新它(我知道因为下拉列表中显示的数据) 但是for循环因浏览器错误而失败:

  

“TypeError:无法读取属性'expertions'的未定义”

然后,如果我关闭模态并再次单击它工作正常并且没有错误。 但是当我刷新时,错误会在第一次点击时返回,并从第二次点击中消失。

知道怎么解决吗?

2 个答案:

答案 0 :(得分:2)

不要在ng-click上调用两个函数。而是在ng-click函数中包含其他函数。

例如你的html:

<a ng-click="workerInfo(worker.id);"> 
  <i class="glyphicon glyphicon-edit white"></i>
</a> 

控制器:

$scope.workerInfo = function(workerID) {
  // Do something
  $scope.professionsInfo();
};

$scope.professionsInfo = function() {
  // Do something else
} 

修改

只有在您从$scope.professionsInfo http响应中获得成功后才能打开您的模态。

或者甚至更好地将两者结合起来,只调用一个首先执行http请求的函数,然后打开模态窗口并完成剩下的所需内容。

答案 1 :(得分:0)

我遇到了同样的问题,并且一旦它正在工作就调用该方法。

在我的页面中,我创建了一个工厂并保留了所有ajax调用。现在一切都写在控制器部分,那么工厂和服务的用途是什么。