Ich bin ein totaler Neuling in AngularJs, also bitte habe Geduld mit mir.Rufen Sie einen Controller aus einem anderen
Ich habe folgende Winkel App, die zwei Controller enthält
(function() {
angular.module("app-machines", ['ngFlatDatepicker'])
.controller('mainController', ['$scope', mainController])
.controller("machinesController", machinesController);;
function mainController($scope) {
$scope.datepickerConfig_From = {
allowFuture: true,
dateFormat: 'DD.MM.YYYY',
minDate: moment.utc('2015-09-13'),
maxDate: moment.utc('2015-09-17')
};
$scope.datepickerConfig_To = {
allowFuture: true,
dateFormat: 'DD.MM.YYYY',
minDate: moment.utc('2015-09-13'),
maxDate: moment.utc('2015-09-17')
};
$scope.date_from = "14.09.2015";
$scope.date_to = "15.09.2015";
$scope.change = function() {
//somehow execute machinesController get function
};
}
function machinesController($http) {
var vm = this;
vm.errorMessage = "";
vm.machines = [];
$http.get("/api/machine/2015-09-14_2015-09-16")
.then(function (response) {
//success
angular.copy(response.data, vm.machines);
}, function (error) {
//failure
vm.errorMessage = "Failed to load data:" + error;
});
}
})();
mein machinesController
soll eine GET
Funktion mit Parametern aufzurufen. Hier sind die Parameter 2015-09-14 und die zweite ist 2015-09-16 (für jetzt sind sie fest codiert).
Was ich erreichen möchte, ist, dass ich eine zwei Eingabekontrollen auf meiner Hauptseite habe, die $scope.change
Funktion auslösen (befindet sich am unteren Ende der ersten mainController
). Hier möchte ich die Werte date_from
und date_to
an die GET-Funktion übergeben, damit ich bestimmte Werte abrufen kann.
Was ich tun kann (am Ende, wenn nichts geht) ist, die Ode von machinesController
in meine mainController
zu kopieren und das würde das Problem lösen.
Allerdings würde ich gerne lernen, damit etwas besser zu arbeiten, deshalb würde ich gerne lernen, wie man es richtig macht (in diesem Fall ein Modul von dem anderen anzurufen).
Was muss ich ändern, um dies zu erreichen?
EDIT:
Der Grund, warum ich habe machinesController ist, wie bereits erwähnt wurde, die JSON-Daten donwload und es dem Benutzer zeigen. Also am Ende in meinem HTML-Code habe ich folgendes:
<div ng-controller="machinesController as vm" class="col-md-6 col-md-offset-3">
<div class="text-danger" ng-show="vm.errorMessage"> {{ vm.errorMessage }}</div>
<table class="table table-responsive table-striped">
<tr ng-repeat="machine in vm.machines">
<td> {{ machine.name }}</td>
</tr>
</table>
</div>
Welche zeigt eine Tabelle mit Maschinennamen.
Haben Sie den Eindruck haben einen zweiten Controller zu benutzen? –
Dieser Controller kümmert sich um das Herunterladen der Daten. Dies bedeutet, dass ich "$ http" in es injizieren muss. Oder ich nicht? –
Ok dann solltest du einen Service machen. :) –