AngularJS 错误:$rootScope:infdig 无限$digest循环

AngularJS Error: $rootScope:infdig Infinite $digest Loop

本文关键字:digest 循环 无限 rootScope 错误 AngularJS infdig      更新时间:2023-09-26

我知道这个问题之前已经提到过几次,但我似乎无法使任何这些解决方案对我有用。

在我的控制器中,我有一个函数,该函数旨在从 ng-repeat 循环中调用。ng-repeat 遍历服务器列表,并通过视图上的方法调用此函数以获取有关该服务器的一些环境数据。

这个功能似乎是问题的根源,但我无法弄清楚如何解决它。

控制器中的功能:

function getServHead(data) {
    SearchFactory.servHeader(data).then(
        function (response) {
            $log.info(response);
            vm.searchData.server.sh = response;
            return vm.searchData.server.sh;
        },
        function (error) {
            $log.error('Error getting server header data', error);
            vm.getTeamHeadInfoError = 'Error retrieving server header data';
        })
}

以下是我返回的数据示例:

{
  "name": "dcsql01",
  "isVirtual": false,
  "os": "Windows",
  "isInDMZ": false
}

我如何从视图中调用:

<tr ng-repeat="server in vm.searchData.server">
  <td>
    <a href="/server/{{server.Name}}">
    {{vm.getServHead(server.AssetID)}}
    <span ng-if="vm.searchData.server.sh.isVirtual == true" class="fa fa-cloud fa-lg"> </span>
    <span  ng-if="vm.searchData.server.sh.isVirtual != true"class="fa fa-tasks fa-lg"> </span>
    <span ng-if="vm.searchData.server.sh.isInDMZ == true" class="fa fa-user-secret fa-lg"> </span>
    <span ng-if="vm.searchData.server.sh.isInDMZ != true" class="fa fa-university fa-lg"> </span>
    <span ng-if="vm.searchData.server.sh.os == 'windows' || 'Windows'" class="fa fa-windows fa-lg"> </span>
    <span ng-if="vm.searchData.server.sh.os == 'linux' || 'Linux'" class="fa fa-linux fa-lg"> </span>
    {{server.Name}}</a>
  </td>
  <td>
    <td> <span class='health'>100</span> </td>
  </td>
</tr>

我已经尝试返回 GET 响应,例如建议此错误的 Angular 帮助页面,并尝试了此问题的其他各种 SO 答案,但仍然遇到同样的问题。

如果有人能够对我做错的地方有所了解,将不胜感激。

编辑:

控制器中的服务器列表调用:

function getServers() {
    SearchFactory.getServer(searchID).then(
        function (response) {
            $log.info(response);
            vm.searchData.server = response;
        },
        function (error) {
            $log.error('Error getting server search data', error);
            vm.getServerInfoError = 'Error retrieving server search data';
        })
}

这是在初始化时运行的,并将参数(searchID)中的内容传递给API,后者返回服务器对象的基本数组。

对于初学者来说,then(response)中的实际数据包含在response.data中。

以下内容将在重复的 ECH 服务器的属性server.sh中填充 HEAD 数据

function getServers() {
  return SearchFactory.getServer(searchID).then(function(response) {
      $log.info(response.data);
      vm.searchData.server = response.data;
      return vm.searchData.server;
    },
    function(error) {
      $log.error('Error getting server search data', error);
      vm.getServerInfoError = 'Error retrieving server search data';
    })

}

getServers().then(function(servers) {
  servers.forEach(function(server) {
    var id = server.AssetID;
    SearchFactory.servHeader(id).then(function(response) {
        $log.info(response);
        server.sh = response.data;
      },
      function(error) {
        $log.error('Error getting server header data', error);
        vm.getTeamHeadInfoError = 'Error retrieving server header data';
      });
  });
});

如果您希望在将 dat 传递到视图之前检索所有数据,则需要创建承诺数组并使用$q.all()

示例视图更改为:

改变

<span ng-if="vm.searchData.server.sh.isVirtual == true" class="fa fa-cloud fa-lg"> </span>

<span ng-if="server.sh.isVirtual == true" class="fa fa-cloud fa-lg"> </span>