angular ng-click 从第二次点击开始起作用

angular ng-click works from the second click

我正在使用 ng-click 打开模式并调用函数:

<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() 函数:

$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 returns 更正来自服务器的数据,并在 $scope.professions 上更新它(我知道是因为下拉列表中显示的数据) 但是 for 循环因浏览器错误而失败:

"TypeError: Cannot read property 'professions' of undefined"

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

知道如何解决吗?

不要在 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 请求,然后打开模式 window 并执行您需要的其余内容。

我遇到了同样的问题,并在它工作后调用该方法。

在我的页面中,我创建了一个工厂并将所有 ajax 调用保存在其中。现在都写在controller部分了,那么factory和service有什么用