2013-07-17 51 views
5

我有一個關於從AngularJS的多個源解僱$http.get的問題。下面的代碼很簡單: 我有$scope.test函數,它是HTML中的一個按鈕的點擊處理程序。這$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開發人員工具中的網絡中沒有任何內容)。

但這裏是interesing這樣的:如果我執行測試功能的其他時間(點擊HTML按鈕),我從測試功能響應從$ http.get從圖表按鈕。它看起來像來自圖表按鈕的$ http.get調用正在等待一些東西,當這些東西出現時,它會觸發。

有沒有人有任何想法是什麼將解決這個問題?在控制檯輸出爲場景執行測試,執行圖表按鈕功能,執行測試是這樣的(粗體是從圖表按鈕功能控制檯條目,從測試功能nonbolded:

KLIC NA ID 1 KLIC NA ID 1行 KLIC吶ID 4 KLIC吶ID 1 KLIC吶ID 1 OK KLIC吶ID 4 OK

如果您對此有任何想法,請讓我知道,這件事情讓我發瘋了最後幾個小時。 UPDATE

我解決了它的解決方案,在這裏找到https://github.com/angular/angular.js/issues/2794#issuecomment-18807158,所以我用$ scope。$ apply包裝了我的調用函數。

$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在返回結果。 – Sobis

+0

你的意思是像我更新問題wrope?如果是的話,你一直都是對的,我只是不知道你的意思。 – Sobis

回答