Ich bin so grün bei Angular, ich bin nicht einmal sicher, dass ich eine Suche nach dieser richtig strukturiert habe. Die ganze Richtlinie und die Terminologie der Dienste verwirren mich immer noch, aber das ist nicht meine Frage.AngularJS - Aufruf einer Controller-Funktion von einem Service
Ich habe diese ausgezeichneten Artikel Serie vorne lese nach hinten: http://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
, weshalb ich an dieser Stelle bin in meiner Anwendung. Und warum ich weiß, meine Frage bezieht sich mehr auf die Beziehung zwischen Diensten und Controllern. Eher als Syntax-bezogen.
So, hier ist eine Übersicht über die App:
ich einen Controller haben. Dies geht ab und erhält eine Reihe von Farmdaten für den Benutzer, der einen AJAX-Aufruf an eine PHP-Datei verwendet, und zeigt es auf dem Bildschirm mit seinem eigenen $ scope an.
Sie werden sehen, ich injiziere etwas namens "commonControls". Dies war ein Modul, das ich erstellt habe, um Steuerelemente zu halten, die von mehreren Controllern wiederverwendet werden. In diesem Fall wird ein Dropdown-Feld, das eine Liste der Betriebe enthält der Benutzer Zugriff hat (auch durch einen AJAX-Aufruf erhalten):
var commonControlsApp = angular.module('commonControls', []);
commonControlsApp.controller('farmSelectorCtrl', ['$scope', '$http',function($scope, $http) {
$scope.farmSelectorCtrl ={}
// Change entire farm view when a different farm is selected
$scope.farmSelectorCtrl.switchUserFarm = function() {
var farmId = $scope.farmSelectorCtrl.selectedUserFarm;
$scope.masterCtrl.loadFarms(farmId); // !!! Direct link to masterCtrl
};
// Get a list of the user's farms
$http.post('/service/userfarms').success(function (data) {
$scope.farmSelectorCtrl.userFarms = data.getFarmsPerUserResult.farmIds;
});
}]);
Dies funktioniert gut. Aber wie Sie sehen können, ist der farmSelector direkt mit masterCtrl verbunden. Und das Verhalten dieser loadFarmData-Funktion ist spezifisch für diesen Controller. Mit anderen Worten, es werden nur Dinge ausgeführt, die für diese Seite gelten.
Die Sache ist, dieser farmSelector wird auf anderen Seiten verwendet werden. Und das genaue Verhalten eines Änderungsereignisses wird für jede Seite unterschiedlich sein. Ich kämpfe darum, herauszufinden, wo dieses Verhalten liegen sollte. Und wie es heißen würde, abhängig vom Controller, der den farmSelector verwendet.
Der Artikel, den ich oben verlinkt habe, schlägt vor, dass dieser farmSelector in einem Dienst sein sollte, damit er woanders wiederverwendet werden kann. Aber ich bin immer noch verwirrt darüber, wie Sie einem generischen Dienst eine bestimmte Aktion zuweisen können, die ausgelöst werden soll, wenn ein Ereignis ausgelöst wird.
Ich wünschte, ich sah diese Antwort vor ein paar Stunden Kopf kratzen, wie das geht. Vielen Dank für die Mühe –