2013-07-17 4 views
5

AngularJS에서 여러 소스의 $http.get 발사에 관한 질문이 있습니다. 아래 코드는 매우 간단합니다 : HTML의 버튼 하나를 클릭 처리기 인 $scope.test 기능이 있습니다. 이 $http.get는 정상적으로 작동합니다. 그렇다면 서버에서 데이터를 가져 와서 기본 프리미티브 차트를 만드는 $http.get이 있습니다. 아주 간단하고 잘 작동합니다. 그런 다음 모든 차트 노드에 버튼을 추가하고 버튼 처리기에서 다른 $http.get 호출을 실행하고 싶습니다. 하지만 이건 작동하지 않습니다! 나는이 차트 (지침, 별도의 템플릿과 컨트롤러, ...)하지만 아무것도 작동하지 않습니다 창조의 조합을 많이 시도

$scope.test = function() { 
    console.log('Klic na ID 1'); 
    $scope.commonController.getData('orgunit/1?jsonDepth=3') 
     .success(function(workpositionData,status,headers,config) { 
      console.log('Klic na ID 1 OK'); 
      $scope.workPositions = workpositionData.workPositions; 
     }).error(function(data,status,headers,config) { 
      commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
     }); 
}; 


var options = new primitives.orgdiagram.Config();  
var itemB, itemC, itemD, itemE; 
var rootItem = new primitives.orgdiagram.ItemConfig(); 

options.rootItem = rootItem; 
options.cursorItem = rootItem; 
options.hasSelectorCheckbox = primitives.common.Enabled.True; 

var buttons = []; 
buttons.push(new primitives.orgdiagram.ButtonConfig("add", "ui-icon-folder-open", "Add0"));  
options.buttons = buttons; 

options.onButtonClick = function (e, data) { 
    console.log('Klic na ID '+data.context.id); 
    $http.get('proxy/api/orgunit/' + data.context.id + '?jsonDepth=3') 
    .success(function(workpositionData,status,headers,config) { 
     console.log('Klic na ID '+data.context.id + ' OK'); 
     $scope.workPositions = workpositionData.workPositions; 
    }).error(function(data,status,headers,config) { 
     commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
    });     
}; 

$http.get('proxy/api/orgunit/tree?jsonDepth=2') 
.success(function(orgUnitsData,status,headers,config) { 
    console.log('Reading orgunit tree ok'); 

    rootItem.title = orgUnitsData.orgUnits[0].title; 
    rootItem.description = orgUnitsData.orgUnits[0].description;   
    rootItem.id = orgUnitsData.orgUnits[0].id; 
    rootItem.hasSelectorCheckbox = false; 
    rootItem.image = "http://www.basicprimitives.com/demo/images/photos/a.png"; 

    $scope.addItems(rootItem, orgUnitsData.orgUnits[0].subordinates, 0); 
    jQuery(".basicdiagram").orgDiagram(options); 


}).error(function(data,status,headers,config) { 
    console.log('Reading orgunit not ok'); 
}); 

: 여기

는 코드입니다. 차트 노트에서 $ http.get 호출은 실행되지 않습니다 (Chome Developer Tools의 Network에는 아무 것도 없습니다).

그러나 여기이를 interesing있다 : 나는 테스트 기능을 다른 시간에 실행하면, 내가 차트 버튼에서 $ http.get에서 테스트 기능 에서 응답을 (HTML 버튼을 클릭합니다). 차트 버튼에서 $ http.get 호출이 뭔가를 기다리고있는 것처럼 보입니다.이 무언가가 나타날 때, 불이 솟습니다.

누구든지이 문제의 해결 방법을 알고 있습니까? 시나리오 콘솔 출력 굵게 테스트 기능으로부터 nonbolded 차트 버튼 기능에서 콘솔 항목이다 (시험 실행 차트 버튼 기능을 수행하는 시험이처럼 실행 : ID 1 OK를 노나 1 KLIC ID 노나

KLIC KLIC ID NA 4 KLIC ID NA 1 KLIC ID NA 1 OK KLIC ID 4 알려 주시기 바랍니다 이것에 대해 어떤 생각을 가지고 있다면,이 일을 미친 몇 마지막 날 운전

OK NA 시간. 업데이트

해결 방법은 여기에 나와 있습니다. 여기서는 https://github.com/angular/angular.js/issues/2794#issuecomment-18807158으로 전화 했으므로 $ scope. $ apply.로 호출 기능을 래핑했습니다. 각 1.1.4에서 시작

$scope.$apply(function() { 
    console.log('Klic na ID ' + data.context.id); 
    $scope.commonController.getData('orgunit/' + data.context.id + '?jsonDepth=3') 
    .success(function(workpositionData,status,headers,config) { 
     console.log('Klic na ID ' + data.context.id + ' OK'); 
     $scope.workPositions = workpositionData.workPositions; 
    }).error(function(data,status,headers,config) { 
     commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
    }); 
}); 

안부

+0

범위를 넣으십시오. 코드에서 $ apply() –

+0

정확히 어디입니까? $ apply()는 문제를 해결하지 못한다고 생각합니다. 문제는 $ http.get이 실행되지 않고 결과가 UI에서 redering이 아니기 때문입니다. – Sobis

+0

당신은 내가 질문 갱신에서 wrope를 좋아한다는 것을 의미합니까? 그렇다면 항상 당신이 옳았다는 것을 알았습니다. – Sobis

답변