2013-06-13 2 views
0

를 업데이트이 arent는 내가 어떤 신인 실수를하고 있어요, 그래서 만약 내가 참아주세요 :) 좋아 너무데이터 바인딩

을 나는이 site이 서버 모니터가에 대한 기본적 인 각도 꽤 새로운 해요 "Armagetron Advanced"라고 불리는 작은 게임. 이 서버 모니터는 사이트로 돌아올 때마다 json을 다시로드한다고 가정합니다. 여기

내 응용 프로그램에 대한 코드입니다 :

controller('ServerBrowserController', function($scope, ServerDataFactory) { 

    $scope.loadServers = function() { 
     $scope.ServerData = ServerDataFactory.getServerDataWithQ(); 
     //promise.then(function(data) { 
      //$scope.$apply(function() { 
       //$scope.ServerData = data; 
      //}); 
     //}); 
    }   

    document.addEventListener(visibilityChange, function() { 
     if(document[hidden] == false) { 
      $scope.loadServers(); 
     } 
    }, false); 

    $scope.loadServers(); 
}). 
factory('ServerDataFactory', function($http, $q) { 

    var deferred = $q.defer(); 

    var factory = {}; 

    factory.getServerDataWithQ = function() { 
     $http({ method: 'GET', url: '/new/app/serverxml_to_json.php' }). 
      success(function(data) { 
       deferred.resolve(data); 
     }). 
      error(function(data) { 
       alert("Couldn't load xml data."); 
     }); 

     return deferred.promise; 

    }; 

    return factory; 
}). 

는 HTTP 쿼리가 잘 처음 작동하지만, 최대한 빨리 사이트에 다시 와서 PHP 스크립트는 바인딩이 업데이트되지 않습니다, 다시 쿼리 데이터가 다르더라도 나는 이것이 자동적으로 내부적으로 $ apply를 scope에 적용하는 것으로 약속 했으므로 작동 할 것이라고 생각했지만 분명히 그렇지 않다.

$scope.$apply(function() { 
     $scope.ServerData = data; 
    } 

을하지만 지금은 "$ 다이제스트가 이미 진행 [입니다]"고 말했기 때문에 그 또한 작동하지 않았다 : 그래서 나는 $ 수동으로 적용 전화를 시도했다. 그 이상한 것은 tho 였고, $ apply없이 사용했던 첫 번째 시도에서조차 작동하지 않았습니다. .

$scope.$$phase == "$digest" || $scope.$apply(function() { 
    $scope.ServerData = data; 
} 

그러나이 또한 $ 범위 때문에 작동하지 않았다 $$ 단계는 항상에 "$ 다이제스트"설정에 상관없이 : 다이제스트 문제에 대한 몇 가지 연구를하고 후, 솔루션 중 하나는 다음과 같은 시도 제안 처음의 데이터로드 또는 n 번째의 시간입니다.

내가 다음에 어디를 봐야할지 모르기 때문에 너희들이 나를 도울 수 있기를 바랍니다. 사전 :

답변

1

에서

덕분에 당신은 너무 getServerDataWithQ 시도에 대한 모든 호출이 연기 같은를 해결하기 위해, ServerDataFactory에 deferred 객체를 생성하지만, 한 번만 해결할 수 있습니다 연기. 따라서 간단히 해결할 수 있습니다 : var deferred = $q.defer();getServerDataWithQ()으로 이동하십시오.

+0

와우, 내가 그걸 알아 채지 못했다고 나는 믿을 수 없다. 그런 어리석은 실수 ... 어쨌든, 고맙습니다 :) –

관련 문제