AngularJS错误:$ rootScope:infdig Infinite $ digest循环

时间:2016-03-04 17:24:02

标签: javascript angularjs

我知道此问题之前曾多次被提及,但我似乎无法让这些解决方案适合我。

在我的控制器中,我有一个函数,可以在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';
        })
}

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

1 个答案:

答案 0 :(得分:0)

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

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

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';
      });

  });

});

如果您希望在将所有数据传递到视图之前检索所有数据,则需要创建承诺数组并使用$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>