Sono così verde in Angular, non sono nemmeno sicuro che stia strutturando una ricerca per questo correttamente. L'intera direttiva e la terminologia del servizio mi stanno ancora confondendo, ma non è questa la mia domanda.AngularJS - Chiamare una funzione di controller da un servizio
Ho letto questo eccellente fronte serie di articoli alla parte posteriore: http://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
Quale è il motivo per cui io sono a questo punto della mia domanda. E perché so che la mia domanda riguarda più il rapporto tra servizi e controllori. Piuttosto che correlati alla sintassi.
Così qui è una panoramica dell'app:
ho un controller. Questo si spegne e ottiene una serie di dati della farm per l'utente che utilizza una chiamata AJAX in un file PHP e la visualizza sullo schermo usando il proprio $ scope.
var masterApp = angular.module('masterApp', ['myFilters','commonControls']);
masterApp.controller('MasterCtrl', ['$scope','$http', '$filter', 'commonFarmSelector',
function($scope, $http, $filter, commonFarmSelector){
...
$scope.masterCtrl.loadFarmData = function(farmId) {
var postdata = {
"farmId":farmId
};
$http.post('/service/farmproduction', postdata).success(function (data) {
// Do stuff with the $scope using data
}
}
$scope.masterCtrl.loadFarms();
}
Vedrete che sto iniettando qualcosa chiamato "commonControls". Questo era un modulo che ho creato per contenere i controlli che saranno riutilizzati da più controller. In questo caso, un campo a discesa che contiene un elenco di aziende che l'utente ha accesso a (ottenuto anche da una chiamata AJAX):
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;
});
}]);
Questo funziona bene. Ma come puoi vedere, farmSelector è direttamente collegato a masterCtrl. E il comportamento di tale funzione loadFarmData è specifico per quel controller. In altre parole, farà solo cose che si applicano a quella pagina.
Il fatto è che questo farmSelector verrà utilizzato su altre pagine. E il comportamento preciso di un evento di cambiamento sarà diverso per ogni pagina. Quindi sto lottando per capire dove questo comportamento dovrebbe sedersi. E come sarebbe chiamato dipendente dal controller usando farmSelector.
L'articolo che ho collegato sopra suggerisce questo farmSelector dovrebbe essere in un servizio in modo che possa essere riutilizzato altrove. Ma sono ancora confuso su come potresti dare a un servizio generico un'azione specifica da intraprendere quando viene attivato un evento.
Vorrei aver visto questa risposta prima di qualche ora di testa grattando come farlo. Grazie mille per lo sforzo –