Ich versuche Code zu erstellen, der Dienste (Factory) und ngResource verwendet, um eine Anfrage an einen REST-fähigen Dienst zu senden, der optionale Aktionen ausführt und sendet basierend auf Geschäftslogik.Übergeben von mehreren Argumenten vom Controller zum Factory-Service REST-Aufrufe und Zurückgeben von (optionalen) Daten
Ich bin mir einer Frage bewusst, die über etwas Ähnliches spricht, das bei Passing multiple parameters from controller to factory in angularjs gefunden wird. Ich habe Probleme, es für mich zu arbeiten, und es gibt auch einen Mangel an Erklärung.
Ich schreibe dies zu verstehen, wie es funktioniert, Best Practice und so gibt es ein Repository, das für Anfänger wie mich in Zukunft gut ist. Keine Respektlosigkeit an den Autor der Lösung oben angegeben, aber es wird davon ausgegangen wahrscheinlich ein Maß an Klugheit habe ich doch nicht erreicht ;-)
geht hier:
Mein Controller
swof.controller('scheduleController', ['$scope', '$log', '$http', '$filter','moment', 'scheduleServicePeriod', function($scope, $log, $http, $filter, moment, scheduleServicePeriod) {
$scope.name = 'scheduleController::set default values and provide function to generate new schedule';
$log.info('Controller: '+ $scope.name);
$scope.years = ["2017", "2018", "2019","2020","2021","2022"];
$scope.selectedYear = "2017";
$scope.selectedPeriod = Math.ceil(moment().format('w')) | 1 ;
$scope.genSchedule = function()
{
// when button is pressed function 'genSchedule' is called that either has default value for selectedYear and selectedPeriod or one user has selected. This bit works
scheduleServicePeriod.post({ s_year: $scope.selectedYear, s_period: $scope.selectedPeriod }).$promise.then(function(data){
$scope.schedulegen = data;
$scope.genScheduleResponse=moment().format('h:mm:ss a') + " " + data.message;
}, function(data) {
$log.error();('Error: ' + data);
})};
}]);
Meine Fabrik Service
swof.factory('scheduleServicePeriod', function($resource)
{
var data = $resource('/api/schedules/period/:s_year/:s_period',{s_year: "@s_year",s_period: "@s_period" },
{
'post':
{
method: 'POST',
params: {},
isArray:true
}
});
return data;
});
Mein RESTful Web Service
router.route('/schedules/period/:schedule_year/:schedule_period')
.post(function(req,res)
{
// create record
var query = getEngineerIDs();
var jsonMessage = "Success: Generated schedule for year = " + req.params.schedule_year + " and period starting week number = " + req.params.schedule_period ;
console.log(parseInt(req.params.schedule_period%2),parseInt(req.params.schedule_period));
query.exec(function(err,records)
{
if(err) return console.log(err);
var results = SwfFn.populateCalendar(SwfFn.assignEngineers(records),+
req.params.schedule_year,req.params.schedule_period);
if (results.length == 0 ) {
jsonMessage = "Failed: Start year/week in past";
}
console.log(jsonMessage);
for (var count in results)
{
Schedule.findOneAndUpdate (
{ ymd: results[count].ymd, shift: results[count].shift },
results[count],
{upsert: true, new: true, runValidators: true},
function (err,res) { if (err) res.send(err); }
);
}
res.json({message: jsonMessage });
});
})
Was
- Die Werte (Standard oder auf andere Weise) erreichen die Funktion genSchedule passiert.
- Die Werte, die den REST-Service erreichen, sind 'undefiniert' 'undefiniert'
- Das Problem ist mit dem Werksservice.
- Es gibt eine ähnliche Lösung, die ich nicht funktionieren muss (oben)
- Ich bin mir bewusst, dass Sie nur einen JSON von Controller zu Service senden sollten, aber ich bin nicht sicher, wie man es auf der Fabrikseite behandelt .
- Ich kann (noch) nicht den Abrufteil zum Laufen bringen, aber das kann jetzt warten.
Schätzen Sie die Hilfe!
Etwas gefunden bei https://docs.angularjs.org/api/ngResource/service/$resource. Ich lese es immer noch, denke aber, dass es etwas anders adressiert, was ich will (wie Code strukturiert ist). – GerM