Sob*_*bis 5 javascript get http angularjs
我有一个关于$http.get从AngularJS中的多个源触发的问题.下面的代码非常简单:我有一个$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');
});
Run Code Online (Sandbox Code Playgroud)
我尝试了很多组合创建这个图表(指令,单独的模板和控制器,......)但没有任何作用.来自图表注释按钮的$ 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);
});
});
Run Code Online (Sandbox Code Playgroud)
最好的祝福
从角度1.1.4开始,您需要在角度摘要循环的上下文中调用$ http.如果您不这样做,那么您可以$scope.$apply();在http呼叫后手动呼叫.请参阅https://github.com/angular/angular.js/issues/2431#issuecomment-18566595
| 归档时间: |
|
| 查看次数: |
5409 次 |
| 最近记录: |