Javascript AngularJS$http未触发get调用

Javascript AngularJS$http未触发get调用,javascript,http,angularjs,get,Javascript,Http,Angularjs,Get,我有一个关于在AngularJS中从多个来源触发$http.get的问题。下面的代码非常简单: 我有$scope.test函数,它是HTML中一个按钮的点击处理程序。这个$http.get工作正常。 然后我有了$http.get,它从服务器获取一些数据并创建基本原语图表。非常简单,这也很有效。然后,我想在每个图表节点上添加按钮,并在按钮处理程序上执行另一个$http.get调用。但是这个不行 以下是代码: $scope.test = function () { console.log('

我有一个关于在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中的网络中没有任何内容)

但有趣的是:如果我再次执行test函数(单击html按钮),我会从test函数和$http.get from chart按钮获得响应。看起来$http.get调用来自图表按钮正在等待某个内容,当该内容出现时,它将触发

有人知道这个问题的解决办法吗?场景控制台中的输出执行测试,执行图表按钮功能,执行测试如下(粗体是图表按钮功能的控制台条目,非粗体是测试功能的控制台条目:

Klic na ID 1 Klic na ID 1正常 Klic na ID 4 Klic na ID 1 Klic na ID 1正常 Klic na ID 4正常

如果你对此有任何想法,请让我知道,这件事在最后几个小时让我发疯。 更新

我用这里找到的解决方案解决了这个问题,所以我用$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);
    });
});

致以最诚挚的问候

从angular 1.1.4开始,您需要在angular摘要循环的上下文中调用$http。如果不这样做,您可以在http调用后手动调用
$scope.$apply();
。请参见

尝试将作用域。$apply()放在代码中的确切位置?我认为$apply()不会解决问题,因为问题是$http.get没有启动,结果也没有在UI中重新设计。你是说就像我在问题更新中写的一样?如果是的,你一直都是对的,我只是不知道你的意思。