Como compartilhar lógica comum entre controladores?

Eu tenho duas páginas e dois controladores que realizam pesquisas no mesmo conjunto de dados. Um deles tem um formulário simples para especificar critérios de pesquisa. O outro permite ao usuário selecionar dados em um mapa (selecionando uma área ou clicando em recursos no mapa).

O resultado da pesquisa é exibido em uma tabela de dados abaixo dos controles de pesquisa (na mesma página).

Portanto, os controladores têm recursos de pesquisa diferentes, mas também compartilham um comportamento comum, como exibição da grade, paginação, recarregamento, edição em lote de dados da grade etc.

Como resultado, existem várias funções que são repetidas, algumas vezes com pequenas variações, outras exatamente idênticas, nos dois controladores.

A parte da página que exibe os dados também é um modelo compartilhado, incluído nong-include nas duas páginas de pesquisa.

Aqui está um exemplo :

$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);
        }
    });

};

Esta função seleciona todas as linhas da tabela. Está vinculado aong-click&nbsp;de um botão na página.

Existem muitas outras funções como essa, que basicamente leem algum estado do$scope, execute alguma lógica e coloque algo novo de volta no$scope.

Gostaria de remover a duplicação dessas funções e reagrupar o comportamento comum em uma única unidade de código.

Nota: o que estou tentando compartilhar aqui é comportamento, não dados. Essas funções executam a mesma lógica, mas em escopos diferentes.

Como essas são realmente coisas de apresentação / interface do usuário, e precisam ser colocadas no$scope, Não acho que um serviço possa ser usado porque o$scope&nbsp;é uma coisa estritamente controladora e não pode ser injetada em serviços.

Estou experimentando definir uma função autônoma, em um arquivo diferente, e chamando essa função de ambos os controladores:

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);

Ele funciona, mas não é muito elegante, pois define uma função no escopo global, fora de qualquer módulo Angular.

Existe uma maneira nativa angular de conseguir isso? Ou pelo menos mais de acordo com a arquitetura Angular?