2013-07-17 12 views
5

Ho una domanda sull'attivazione di $http.get da più fonti in AngularJS. Il codice qui sotto è piuttosto semplice: Ho la funzione $scope.test che è gestore di clic per un pulsante in HTML. Questo $http.get funziona bene. Quindi ho $http.get che ottiene alcuni dati dal server e crea il grafico delle primitive di base. Molto semplice e funziona anche così. E poi, vorrei aggiungere il pulsante su ogni nodo grafico e sul gestore di pulsanti Vorrei eseguire un'altra chiamata $http.get. Ma questo non funziona!

Ecco il codice:

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

Ho provato un sacco di combinazioni di creare questo grafico (direttiva, modello e controllore separato, ...), ma non funziona nulla. La chiamata $ http.get dal pulsante sulla nota del grafico non viene attivata (niente nella rete in Chome Developer Tools).

ma qui è interesing questo: se eseguo prova funzione un'altra volta (Fare clic sul pulsante HTML), ottengo risposta da funzione di test E da $ http.get dal pulsante Grafico. Sembra che la chiamata $ http.get dal pulsante del grafico sia in attesa di qualcosa e quando questo qualcosa si avvicina, si attiva.

Qualcuno ha idea di cosa sarebbe la soluzione a questo problema? Uscita in consolle per lo scenario esecuzione di test, eseguire la funzione tasto grafico, eseguire test è così (in grassetto sono le voci di console da funzione del pulsante grafico, nonbolded dalla funzione di test:

Klic nd ID 1 Klic nd ID 1 OK Klic na ID 4 Klic nd ID 1 Klic nd ID 1 OK Klic na ID 4 OK

Se avete qualche idea su questo per favore fatemelo sapere, questa cosa mi sta facendo impazzire alcuni scorso ore UPDATE

L'ho risolto con la soluzione, trovato qui https://github.com/angular/angular.js/issues/2794#issuecomment-18807158, così ho avvolto la mia funzione di chiamata con $ 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); 
    }); 
}); 

migliori saluti

+0

provare a mettere scope. $ Apply() nel codice –

+0

Dove esattamente? Penso che $ apply() non risolva il problema, perché il problema è che $ http.get non sta funzionando e non che i risultati non stanno facendo il redering nell'interfaccia utente. – Sobis

+0

Vuoi dire che mi piace l'aggiornamento in questione? Se sì, avevi ragione tutto il tempo, non sapevo cosa volevi dire. – Sobis

risposta

Problemi correlati