簡體   English   中英

AngularJS $ http沒有觸發來電

[英]AngularJS $http not firing get call

我有一個關於從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 Developer Tools中的網絡中沒有任何內容)。

但是這里是這樣的:如果我再次執行測試功能(點擊html按鈕),我會從測試功能來自圖表按鈕的$ http.get獲得響應。 它看起來像是來自圖表按鈕的$ http.get調用正在等待什么東西,當這個東西出現時,它會觸發。

有誰知道這個問題的解決方案是什么? 在控制台中輸出用於場景執行測試,執行圖表按鈕功能,執行測試是這樣的( 粗體是來自圖表按鈕功能的控制台條目 ,來自測試功能的非粗體

Klic na ID 1 Klic na ID 1 OK Klic na ID 4 Klic na ID 1 Klic na ID 1 OK Klic na 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);
    });
});

最好的祝福

從角度1.1.4開始,您需要在角度摘要循環的上下文中調用$ http。 如果你不這樣做,那么你可以手動調用$scope.$apply(); http調用之后。 請參閱https://github.com/angular/angular.js/issues/2431#issuecomment-18566595

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM