Wie teilt man eine gemeinsame Logik zwischen Controllern?

Ich habe zwei Seiten und zwei Controller, die Suchvorgänge für dasselbe Dataset ausführen. Man hat ein einfaches Formular, um Suchkriterien anzugeben. Mit der anderen Option kann der Benutzer Daten auf einer Karte auswählen (indem er einen Bereich auswählt oder auf Features auf der Karte klickt).

Das Ergebnis der Suche wird dann in einer Datentabelle unter den Suchsteuerelementen (auf derselben Seite) angezeigt.

So haben die Controller unterschiedliche Suchfunktionen, haben aber auch viele gemeinsame Verhaltensweisen, d. H. Anzeigen des Rasters, Blättern, Neuladen, Stapelbearbeitung von Daten aus dem Raster usw.

nfolgedessen gibt es mehrere Funktionen, die in beiden Steuerungen wiederholt werden, manchmal mit geringfügigen Abweichungen, manchmal genau identisc

Der Teil der Seite, auf dem die Daten angezeigt werden, ist auch eine freigegebene Vorlage, die in @ enthalten isng-include auf beiden Suchseiten.

Hier ist ein Beispiel

$scope.selectAllRows = function(){

    var selectedItems = $scope.searchState.selectedItems;

    angular.forEach($scope.searchState.searchResult.rows, function(row){
        // add only if not already selected
        if(selectedItems.indexOf(row) < 0){
            selectedItems.push(row);
        }
    });

};

Diese Funktion wählt alle Zeilen in der Tabelle aus. Es ist an das @ gebundng-click einer Schaltfläche auf der Seite.

Es gibt viele andere Funktionen wie diese, die im Grunde genommen einen Zustand aus dem @ lese$scope, führe eine Logik aus und setze etwas Neues zurück in das$scope.

Ich möchte die Duplizierung dieser Funktionen entfernen und das allgemeine Verhalten in einer einzigen Codeeinheit zusammenfassen.

Hinweis: Was ich hier zu teilen versuche, ist Verhalten, nicht Daten. Diese Funktionen führen dieselbe Logik aus, jedoch in unterschiedlichen Bereichen.

Da dies wirklich Präsentations- / UI-Sachen sind, müssen sie auf das @ gesetzt werde$scope, Ich glaube nicht, dass ein Dienst verwendet werden könnte, weil das$scope ist eine reine Steuerungssache und kann nicht in Services eingefügt werden.

Ich experimentiere damit, eine eigenständige Funktion in einer anderen Datei zu definieren und diese Funktion von beiden Controllern aufzurufen:

myapp.defineCommonControllerBehaviour = function($scope, someOtherService){
    $scope.selectAlRows = function(){....}

    $scope.someOtherCommonTask = function(){
         someOtherService.doTheTask();
    }

    //etc...
};

//controller 1
myapp.defineCommonBehaviour($scope, someOtherService);

//controller 2
myapp.defineCommonBehaviour($scope, someOtherService);

Es funktioniert, ist aber nicht sehr elegant, da es eine Funktion im globalen Bereich außerhalb eines beliebigen Angular-Moduls definiert.

Gibt es einen kantigen Weg, dies zu erreichen? Oder zumindest mehr im Einklang mit der Angular-Architektur?