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
provare a mettere scope. $ Apply() nel codice –
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
Vuoi dire che mi piace l'aggiornamento in questione? Se sì, avevi ragione tutto il tempo, non sapevo cosa volevi dire. – Sobis