2013-07-17 50 views
5

Tôi có câu hỏi về cách kích hoạt $http.get từ nhiều nguồn trong AngularJS. Mã dưới đây khá đơn giản: Tôi có chức năng $scope.test là trình xử lý nhấp chuột cho một nút trong HTML. Điều này $http.get hoạt động ok. Sau đó, tôi có $http.get nhận dữ liệu từ máy chủ và tạo biểu đồ nguyên thủy cơ bản. Rất đơn giản và nó cũng hoạt động tốt. Và sau đó, tôi muốn nối thêm nút trên mỗi nút biểu đồ và trên trình xử lý nút mà tôi muốn thực hiện cuộc gọi $http.get khác. Nhưng cái này không hoạt động!

Đây là mã:

$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'); 
}); 

tôi đã cố gắng rất nhiều sự kết hợp của việc tạo ra biểu đồ này (chỉ thị, mẫu và bộ điều khiển riêng biệt, ...) nhưng không hoạt động. $ http.get cuộc gọi từ nút trên biểu đồ lưu ý không cháy (không có gì trong mạng trong Công cụ phát triển Chome).

Nhưng ở đây là interesing này: nếu tôi thực hiện kiểm tra chức năng thời gian khác (bấm vào nút html), tôi nhận được phản hồi từ chức năng kiểm tra từ $ http.get từ nút biểu đồ. Có vẻ như cuộc gọi $ http.get từ nút biểu đồ đang chờ đợi thứ gì đó và khi thứ gì đó này hoạt động, nó sẽ kích hoạt.

Có ai có ý tưởng gì sẽ là giải pháp cho vấn đề này không? Sản lượng trong giao diện điều khiển cho kịch bản thực hiện kiểm tra, thực hiện nút chức năng biểu đồ, thực hiện kiểm tra là như thế này (in đậm là console mục từ nút biểu đồ chức năng, nonbolded từ chức năng kiểm tra:

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

Nếu bạn có bất kỳ ý tưởng về vấn đề này xin vui lòng cho tôi biết, điều này là lái xe cho tôi điên một vài cuối cùng giờ CẬP NHẬT

Tôi đã giải quyết nó bằng giải pháp, được tìm thấy ở đây https://github.com/angular/angular.js/issues/2794#issuecomment-18807158, vì vậy tôi đã bọc chức năng gọi của mình với phạm vi $. $ Áp dụng.

$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); 
    }); 
}); 

Trân trọng

+0

cố gắng đặt phạm vi. $ Apply() trong mã –

+0

Trường hợp chính xác? Tôi nghĩ $ apply() sẽ không giải quyết được vấn đề, bởi vì vấn đề là $ http.get không kích hoạt và không phải là kết quả không được redering trong UI. – Sobis

+0

Bạn có nghĩa là tôi đang cập nhật câu hỏi? Nếu có, bạn đã đúng tất cả các thời gian, tôi chỉ không biết những gì bạn có nghĩa là. – Sobis

Trả lời

Các vấn đề liên quan