2016-12-22 2 views
0

Ich habe einen Service definiert, der die db-bezogenen Abfragen/Updates durchführt. Ich habe den Controller definiert, der die Datenanalyse für die eckigen Elemente durchführt, indem er die Objekte vom Dienst abruft. Ich möchte jeden Bereich unterschiedlich haltenDaten von Angular 1.x Factory zu Angular 1.x Controller senden

Wie kann ich die Daten von Service zu Controller mit ngResource übergeben.

Musterservice:

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
    var svc = {}; 
    var home = $resource('/home/getAll'); 
    var dbData= home.get(); 
    svc.getRooms = function() { 
     return dbData; 
    }; 
    return svc; 
}]); 

Probe Controller:

app.controller("homeCtrl",["$scope","$mdDialog","ioHomeService",function($scope,$mdDialog,ioHome){ 
    $scope.dbData = ioHome.getRooms(); 
    //Here UI specific objects/data is derived from dbData 
}]); 

Nach dem DB abgefragt und die Ergebnisse sind avialble die DBData in Dienst die Daten von DB reflektieren, aber der Controller kann nicht erhalten diese Daten

+0

Eigentlich Sie Code hat viele Problem zurückgekehrt ist. $ resource ist ein asynchroner Aufruf. Sie sollten sich mit Promise & $ q vertraut machen, bevor Sie tiefer gehen. –

Antwort

1

Es ist wichtig zu erkennen, dass ein $ Ressourcenobjekt aufruft Verfahren sofort gibt eine leere Referenz (Objekt oder Array in Abhängigkeit von isArray). Sobald die Daten vom Server zurückgegeben werden, wird die vorhandene Referenz mit den tatsächlichen Daten gefüllt. Dies ist ein nützlicher Trick , da normalerweise die Ressource einem Modell zugewiesen ist, das dann von der Ansicht gerendert wird. Ein leeres Objekt führt zu keinem Rendering, Sobald die Daten vom Server ankommen, wird das Objekt mit den Daten bestückt und die Ansicht wird automatisch neu gerendert und zeigt die neuen Daten an. Dies bedeutet, dass in den meisten Fällen nie eine Callback-Funktion für die Aktionsmethoden geschrieben werden muss.

Von https://docs.angularjs.org/api/ngResource/service/ $ resource

Da die 'ioHome.getRooms();' genannt wird, bevor die $ resource die Daten, die Sie bekommen DBData als leere Referenz

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
    var svc = { 
    dbData : {} 
    }; 
    var home = $resource('/home/getAll'); 
    var svc.dbData.rooms = home.get(); 
    return svc; 
}]); 

-Controller

app.controller("homeCtrl",["$scope","$mdDialog","ioHomeService",function($scope,$mdDialog,ioHome){ 
    $scope.dbData = ioHome.dbData; 

    //You can access the rooms data using $scope.dbData.roooms 

    //Here UI specific objects/data is derived from dbData 
}]); 
-1

Sie müssten das Service-Objekt, wie folgt zurückgeben:

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
var svc = {}; 
var home = $resource('/home/getAll'); 
var dbData= home.get(); 
svc.getRooms = function() { 
    return dbData; 
}; 
return svc; //here 
}]); 

Derzeit ist die Methode für Ihren Controller nicht sichtbar.

+0

Entschuldigung. Ich habe die Rückkehr SVC im Code hinzugefügt. Empfange immer noch das leere Objekt – rcreddy

Verwandte Themen